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