python数据分析包|NumPy-02

语言: CN / TW / HK

本文图解numpy基础使用方法。
首发于本人公众号:pythonic生物人

更好的阅读体验请戳:

python数据分析包|NumPy-02

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]]])
复制代码

参考资料

jalammar.github.io/visual-nump…
Python数据科学手册
B站up: www.bilibili.com/video/BV134…


更好的阅读体验请戳:

python数据分析包|NumPy-02


欢迎关注公众号:pythonic生物人 干货,真香

分享到: