python输入数组并计算_利用Python进行数据分析——Numpy基础:数组和矢量计算
利用Python進(jìn)行數(shù)據(jù)分析——Numpy基礎(chǔ):數(shù)組和矢量計算
ndarry,一個具有矢量運(yùn)算和復(fù)雜廣播能力快速節(jié)省空間的多維數(shù)組
對整組數(shù)據(jù)進(jìn)行快速運(yùn)算的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù),無需for—loop
用于讀寫磁盤數(shù)據(jù)的工具以及用于操作內(nèi)存映射文件的工具?
線性代數(shù)、隨機(jī)數(shù)生成以及傅里葉變換功能
用于集成C/C++等代碼的工具
一、ndarry:一種多維數(shù)組對象
1、創(chuàng)建ndarry
#一維
In [5]: data = [1,2,3]
In [6]: import numpy as np
In [7]: arr1 = np.array(data)
In [8]: arr1
Out[8]: array([1, 2, 3])
#二維
In [11]: data2 = [[1,2,3],[4,5,6]]
In [12]: arr2 = np.array(data2)
In [13]: arr2
Out[13]:
array([[1, 2, 3],
[4, 5, 6]])
#查看數(shù)組的信息
In [15]: arr2.shape
Out[15]: (2, 3)
In [16]: arr2.dtype
Out[16]: dtype('int32')
數(shù)組創(chuàng)建函數(shù)
array()
arange(),類似Python內(nèi)置函數(shù)range(),但是range()返回的是列表
ones,zeros 創(chuàng)建一個全為1/0的數(shù)組,但是傳進(jìn)去的參數(shù)要是一個集合,例如np.ones((2,3))
ones_like,zeros_like 創(chuàng)建一個跟傳進(jìn)去數(shù)組形狀一樣的全1/0數(shù)組
empty,empty_like 創(chuàng)建空的數(shù)組,分配內(nèi)存,不存值
eye,identity 創(chuàng)建方陣
2.數(shù)組和標(biāo)量之間的運(yùn)算
In [36]: arr2
Out[36]:
array([[1, 2, 3],
[4, 5, 6]])
In [37]: arr3
Out[37]:
array([[11, 12, 13],
[14, 15, 16]])
#加
In [38]: arr2+arr3
Out[38]:
array([[12, 14, 16],
[18, 20, 22]])
#乘
In [39]: arr2*arr3
Out[39]:
array([[11, 24, 39],
[56, 75, 96]])
#減
In [40]: arr3-arr2
Out[40]:
array([[10, 10, 10],
[10, 10, 10]])
#除
In [41]: arr3/arr2
Out[41]:
array([[11. , 6. , 4.33333333],
[ 3.5 , 3. , 2.66666667]])
#平方
In [42]: arr2**2
Out[42]:
array([[ 1, 4, 9],
[16, 25, 36]], dtype=int32)
3.索引和切片
索引:
arr2d[0,0]或者是arr2d[0][0]
arr3d[0,0,0]或者是arr3d[0][0][0]
切片:有:標(biāo)記
arr2d[:2,:2]
arr3d[:2,:2]
先區(qū)分?jǐn)?shù)組和列表的操作
數(shù)組的切片是在原始數(shù)組上進(jìn)行的,而列表的切片操作則是進(jìn)行了數(shù)據(jù)的賦值
如果需要切片的是一份副本而不是源數(shù)組本身,需要arr[5:8].copy()
#列表的切片
>>> l1 = list(range(10))
>>> l1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l2 = l1[5:8]
>>> l2
[5, 6, 7]
>>> l2[0]=15
>>> l2
[15, 6, 7]
>>> l1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#數(shù)組的切片
In [50]: arr = np.arange(10)
In [51]: arr
Out[51]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [52]: arr_slice = arr[5:8]
In [53]: arr_slice
Out[53]: array([5, 6, 7])
In [54]: arr_slice[0]=15
In [55]: arr_slice
Out[55]: array([15, 6, 7])
In [56]: arr
Out[56]: array([ 0, 1, 2, 3, 4, 15, 6, 7, 8, 9])
#二維數(shù)組的切片
In [95]: arr2d
Out[95]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
In [96]: arr2d[:2]
Out[96]:
array([[1, 2, 3],
[4, 5, 6]])
一次可以傳入多個切片
In [97]: arr2d[:2,:1]
Out[97]:
array([[1],
[4]])
In [98]: arr2d[:2,:2]
Out[98]:
array([[1, 2],
#3維
In [83]: arr3d
Out[83]: [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]
In [84]: arr3d[1]
Out[84]: [[7, 8, 9], [10, 11, 12]]
In [85]: arr3d[1][1]
Out[85]: [10, 11, 12]
In [86]: arr3d[1][1][1]
Out[86]: 11
In [87]: arr3d[1][1][2]
Out[87]: 12
布爾型索引
#[True,False,True]就相當(dāng)有是取第0/2行
In [121]: arr2d[[True,False,True]]
Out[121]:
array([[1, 2, 3],
[7, 8, 9]])
In [122]: arr2d[[True,False,True],2]
Out[122]: array([3, 9])
花式索引
#與上邊的博布爾型索引一樣,也是取第0/2行
In [132]: arr2d[[0,2]]
Out[132]:
array([[1, 2, 3],
[7, 8, 9]])
#花式索引注意以下問題
花式索引跟切片不同,總是將數(shù)據(jù)復(fù)制到新數(shù)組中,所以造成以下現(xiàn)象
In [136]: arr2d[[0,2],[0,2]]
Out[136]: array([1, 9])
In [137]: arr2d[[0,2]][:,[0,2]]
Out[137]:
array([[1, 3],
[7, 9]])
數(shù)組轉(zhuǎn)置和軸對換
轉(zhuǎn)置是重塑的一種特殊形式,它返回的是源數(shù)據(jù)的視圖,不會進(jìn)行復(fù)制操作。
In [142]: arr2d.T
Out[142]:
array([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
4.對數(shù)組的元素進(jìn)行操作的函數(shù)
對單個數(shù)組元素的操作函數(shù)
abs 計算絕對值
sqrt 計算各元素的平方根
square 計算各元素的平方
exp 計算各元素的以e為底的指數(shù)
log/log10/log2/log1p log1p是log(1+x)
sign 計算各元素的正負(fù)號
ceil 計算大于等于該元素的最小整數(shù)
floor 計算小于等于該元素的最大整數(shù)
rint 將該元素四舍五入到最接近的整數(shù)
modf 返回該元素的小數(shù)和整數(shù)部分,以兩個獨(dú)立數(shù)組的形式
isnan is not a number 判斷各元素是否是數(shù)字
isfinite isinf 判斷各元素有窮無窮
cos/sin/tan
arccos/acccosh/arcsin
對兩個數(shù)組元素操作的函數(shù)
add 將數(shù)組中元素相加
subtract 第一個數(shù)組中元素減去第二個數(shù)組中元素
multiply 數(shù)組對應(yīng)元素相乘
divide floor_divide 除法、丟棄余數(shù)的除法
power(a,b) 將a中元素計算b中對應(yīng)元素 a的b次方
mod 求除法的余數(shù)
copysign 將第二個數(shù)組中的元素符號賦值給第一個數(shù)組中的值
< >= <= == != 比較對應(yīng)元素的值
logical_and/logical_or/logical_xor
5.一些可以用數(shù)組來處理的運(yùn)算
矢量化方便運(yùn)算
三元運(yùn)算
In [6]: xarr = np.array([1.1,1.2,1.3,1.4,1.5])
In [7]: yarr = np.array([2.1,2.2,2.3,2.4,2.5])
In [8]: cond = np.array([True,False,True,True,False])
In [9]: result = [x if c else y for x ,c ,y in zip(xarr,yarr,cond)]
In [10]: result
Out[10]: [1.1, 1.2, 1.3, 1.4, 1.5]
np.where通常用于根據(jù)一個數(shù)組生成另外一個數(shù)組
In [11]: result2 = np.where(cond,xarr,yarr)
In [12]: result2
Out[12]: array([1.1, 2.2, 1.3, 1.4, 2.5])
數(shù)學(xué)和統(tǒng)計方法
這些方法既可以當(dāng)做實(shí)例方法調(diào)用arr2d.sum()也可以通過np.sum(arr2d)
sum 計算所有元素的和
mean 計算所有元素的均值
std/var 計算標(biāo)準(zhǔn)差和方差
min/max 最大值和最小值
argmin/argmax 最小值和最大值的索引
cumsum 返回一個所有元素累加的數(shù)組 累計和
cumprod 所有元素的累計積
用于布爾型數(shù)組的方法
#True直接當(dāng)1計算
In [24]: (arr2d<4).sum()
Out[24]: 3
In [25]: cond
Out[25]: array([ True, False, True, True, False])
In [26]: cond.any()
Out[26]: True
In [27]: cond.all()
Out[27]: False
排序
np.sort() 這個會復(fù)制一個副本
arr2d.sort()是在源數(shù)據(jù)上的操作
6.用于數(shù)組文件的輸入輸出
將數(shù)組以二進(jìn)制形式保存到磁盤
np.save()
np.load()
存取文本文件
np.loadtext()
np.savetext()
7.線性代數(shù) 找不到時就在numpy.linalg
注:轉(zhuǎn)置 arr.T
np.dot(arr1,arr2) 兩個矩陣的乘積
np.diag 返回對角線元素/或以一維數(shù)組轉(zhuǎn)化為以此為對角線的方陣
trace() 計算對角線的和
det 計算f方陣的行列式值
eig 計算特征值和特征向量
inv 計算逆矩陣
pinv 計算偽逆矩陣
qr 計算QR分解
svd 計算奇異值分解
solve 解線性方程Ax=b
lstsq 計算Ax=b的最小二乘解
8.隨機(jī)數(shù)生成 numpy.random對Python內(nèi)置的random進(jìn)行了補(bǔ)充
seed 確定隨機(jī)數(shù)生成的種子
permutation 返回一個序列的隨機(jī)排列或返回一個隨機(jī)排列的范圍
shuffle 對一個序列就地隨機(jī)排列
rand 產(chǎn)生均勻分布的樣本值
randint 從給定的上下范圍內(nèi)隨機(jī)選取整數(shù)
randn 產(chǎn)生正態(tài)分布的樣本值
binomial 產(chǎn)生二項(xiàng)分布的樣本值
normal 產(chǎn)生二項(xiàng)分布的樣本值
beta 產(chǎn)生Beta分布的樣本值
chisquare 產(chǎn)生卡方分布的樣本值
gamma 產(chǎn)生Gamma分布的樣本值
uniform 產(chǎn)生(0,1)均勻分布的樣本值
總結(jié)
以上是生活随笔為你收集整理的python输入数组并计算_利用Python进行数据分析——Numpy基础:数组和矢量计算的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python的难点是什么_总结学习pyt
- 下一篇: python输入数据的维度_keras分