本文图解numpy基础使用方法。
首发于本人公众号:pythonic生物人
更好的阅读体验请戳:
1、一维数组
创建数组
In [77]: import numpy as np
In [78]: np.array([1,2,3])
Out[78]: array([1, 2, 3])
numpy创建元素全为1、为0及随机数数组
In [79]: np.ones(3)
Out[79]: array([1., 1., 1.])
In [80]: np.zeros(3)
Out[80]: array([0., 0., 0.])
In [81]: np.random.random(3)
Out[81]: array([0.95802737, 0.47883203, 0.12742189])

数组相加
In [83]: data = np.array([1,2])
In [84]: ones = np.ones(2)
In [85]: data
Out[85]: array([1, 2])
In [86]: ones
Out[86]: array([1., 1.])
In [87]: data + ones
Out[87]: array([2., 3.])

数组相减、乘、除
In [88]: data - ones
Out[88]: array([0., 1.])
In [89]: data * ones
Out[89]: array([1., 2.])
In [90]: data / ones
Out[90]: array([1., 2.])

数组与常数的运算,即广播(broadcasting)
In [91]: data * 1.6#这种计算逻辑被称为广播(broadcasting)
Out[91]: array([1.6, 3.2])

数组索引
In [99]: data = np.array([1,2,3])
In [100]: data
Out[100]: array([1, 2, 3])
In [101]: data[0]
Out[101]: 1
In [102]: data[1]
Out[102]: 2
In [104]: data[0:2]
Out[104]: array([1, 2])
In [105]: data[1:]
Out[105]: array([2, 3])
数组简单统计计算(aggregation)
一些统计计算的函数 :
函数名称 描述
np.sum 计算元素的和
np.prod 计算元素的积
np.mean 计算元素的平均值
np.std 计算元素的标准差
np.var 计算元素的方差
np.min 找出最小值
np.max 找出最大值
np.argmin 找出最小值的索引
np.argmax 找出最大值的索引
np.median 计算元素的中位数
np.percentile np.nanpercentile 计算基于元素排序的统计值
np.any 验证任何一个元素是否为真
np.all 验证所有元素是否为真
In [106]: data.max()
Out[106]: 3
In [107]: data.min()
Out[107]: 1
In [108]: data.sum()
Out[108]: 6

2、二维数组
-
数组构建
In [2]: import numpy as np
In [3]: np.array([[1,2],[3,4]])
Out[3]:
array([[1, 2],
[3, 4]])

ones、zeros、random创建数组
In [4]: np.ones((3,2))#元素全为1的数组
Out[4]:
array([[1., 1.],
[1., 1.],
[1., 1.]])
In [5]: np.zeros((3,2))#元素全为0的数组
Out[5]:
array([[0., 0.],
[0., 0.],
[0., 0.]])
In [6]: np.random.random((3,2))#随机数数组
Out[6]:
array([[0.99160431, 0.94423442],
[0.77457438, 0.442339 ],
[0.18536075, 0.44602502]])

简单数组运算(+)
In [7]: data = np.array([[1,2],[3,4]])
In [8]: ones = np.ones((2,2))
In [9]: data
Out[9]:
array([[1, 2],
[3, 4]])
In [10]: ones
Out[10]:
array([[1., 1.],
[1., 1.]])
In [11]: data + ones
Out[11]:
array([[2., 3.],
[4., 5.]])

简单数组运算(广播(broadcast)的算法)
In [12]: ones_row = np.ones(2)
In [13]: data + ones_row#此处又使用到广播(broadcast)的算法
Out[13]:
array([[2., 3.],
[4., 5.]])

矩阵运算(dot)
和线性代数里面一样,一个shape为(x,n)的数组与一个shape为(n,y)的数组相乘得一个shape为(x,y)的数组,此处可直观理解为第一个的数组的列数等于第二个的行数。
In [20]: data = np.array([1,2,3])
In [21]: power_of_ten = np.array([1,10,100,1000,10000,100000]).reshape(3,2)
In [22]: data
Out[22]: array([1, 2, 3])
In [23]: power_of_ten
Out[23]:
array([[ 1, 10],
[ 100, 1000],
[ 10000, 100000]])
In [24]: data.dot(power_of_ten)
Out[24]: array([ 30201, 302010])
In [25]: data.shape
Out[25]: (3,)#1行3列的数组
In [26]: power_of_ten.shape
Out[26]: (3, 2)#3行两列的数组
In [27]: data.dot(power_of_ten).shape
Out[27]: (2,)#相乘的一个1行2列的数组
二维数组索引
In [32]: data = np.arange(1,7).reshape((3,2))
In [33]: data
Out[33]:
array([[1, 2],
[3, 4],
[5, 6]])
n [34]: data[0,1]
Out[34]: 2
In [35]: data[1:3]
Out[35]:
array([[3, 4],
[5, 6]])
In [36]: data[0:2,0]#[0:2,0]可以理解逗号前为行的范围,逗号后为列的范围
Out[36]: array([1, 3])
二维数组像一维数组一样的统计运算
In [38]: data.max()
Out[38]: 6
In [39]: data.min()
Out[39]: 1
In [40]: data.sum()
Out[40]: 21

二维数组沿着某个轴统计运算(传入axis参数)
In [43]: data = np.array([[1,2],[5,3],[4,6]])
In [44]: data
Out[44]:
array([[1, 2],
[5, 3],
[4, 6]])
In [46]: data.max()
Out[46]: 6
In [47]: data.min()
Out[47]: 1
In [48]: data.sum()
Out[48]: 21
In [49]: data.max(axis=0)#求每一列(0轴)的最大值
Out[49]: array([5, 6])
In [50]: data.max(axis=1)#求每一行(1轴)的最大值
Out[50]: array([2, 5, 6])

-
二维数组转秩(行变列或者1轴转0轴)
In [51]: data = np.arange(1,7).reshape(3,2)
In [52]: data
Out[52]:
array([[1, 2],
[3, 4],
[5, 6]])
In [53]: data.T
Out[53]:
array([[1, 3, 5],
[2, 4, 6]])
二维数组变形(reshape)
In [54]: data = np.arange(1,7)
In [55]: data
Out[55]: array([1, 2, 3, 4, 5, 6])
In [56]: data.reshape(2,3)
Out[56]:
array([[1, 2, 3],
[4, 5, 6]])
In [57]: data.reshape(3,2)
Out[57]:
array([[1, 2],
[3, 4],
[5, 6]])
3、三维数组
创建三维数组
In [65]: np.ones((4,3,2))#下图能形象的显示意义
Out[65]:
array([[[1., 1.],
[1., 1.],
[1., 1.]],
[[1., 1.],
[1., 1.],
[1., 1.]],
[[1., 1.],
[1., 1.],
[1., 1.]],
[[1., 1.],
[1., 1.],
[1., 1.]]])

In [66]: np.arange(1,9).reshape(2,2,2)#下图更形象
Out[66]:
array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
参考资料
https://jalammar.github.io/visual-numpy/
Python数据科学手册
B站up: https://www.bilibili.com/video/BV134411p7gU
更好的阅读体验请戳:
欢迎关注公众号:pythonic生物人

网友评论