numpy 学习笔记

>>> import numpy as np  #导入numpy

array 的基本操作

arange

>>> a = np.arange(1,15) #返回从1到15的array
>>> a
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
>>>
>>> a = np.arange(15) #返回从0到14的array
>>>
>>> a
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
>>>
>>> a = np.arange(1,15) #返回从1到14的array
>>> a
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
>>>
>>> a = np.arange(10,40,5) #创建array,值为10到40之间,间隔为5
>>> a
array([10, 15, 20, 25, 30, 35])
>>> a = np.arange(0,2,0.3)
>>> a
array([ 0. ,  0.3,  0.6,  0.9,  1.2,  1.5,  1.8])

reshape

>>> b = np.reshape(a,(3,5)) #将数据的数据变为3行5列的array
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/numpy/core/fromnumeric.py", line 225, in reshape
    return reshape(newshape, order=order)
ValueError: total size of new array must be unchanged

为什么会出错呢?  因为 a 只有14个元素,不够分

>>> a = np.arange(0,15) #返回从1到14的array
>>>
>>> b = np.reshape(a,(3,5)) #将数据的数据变为3行5列的array
>>> b
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>>

shape, ndim, size, type

>>> b.shape #返回几行几列
(3, 5)
>>> b.ndim   #返回维度
2
>>> b.dtype.name #数据类型
'int64'
>>> b.size  #array大小
15
>>> type(b)   #b的类型
<type 'numpy.ndarray'>

从list生成 array

>>> a = np.array([2,3,4]) #从list生成array
>>> a
array([2, 3, 4])
>>> b = np.array([(1,2,3),(4,5,6)])#从list生成2维array
>>> b
array([[1, 2, 3],
       [4, 5, 6]])
>>> c = np.array([[1,2,3],[1,2,3]])
>>> c
array([[1, 2, 3],
       [1, 2, 3]])

通过numpy 内建函数初始化 array

>>> a = np.zeros((3,4)) #创建3行4列的全0 array
>>>
>>> a = np.zeros((3,4)) #创建3行4列的全0 array,注意有两层括号
>>> a
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
>>> a = np.ones((3,4)) #创建3行4列的全1 array
>>> a
array([[ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.]])

数组运算

>>> a = np.array([20,30,40,50])
>>> a
array([20, 30, 40, 50])
>>> b = np.arange(4)
>>> b
array([0, 1, 2, 3])
>>> c = a-b
>>> c
array([20, 29, 38, 47])
>>> c = a-b #相减
>>> c
array([20, 29, 38, 47])
>>> b**2
array([0, 1, 4, 9])
>>> b**2   #每个元素的平方
array([0, 1, 4, 9])
>>> 10*np.sin(a)
array([ 9.12945251, -9.88031624,  7.4511316 , -2.62374854])
>>> a<35
array([ True,  True, False, False], dtype=bool)
>>> a*b  #对应位置元素相乘
array([  0,  30,  80, 150])
>>> a.dot(b)
260
>>> a.dot(b)  #矩阵乘法
260
>>> np.dot(a,b)
260

数组运算内建函数

>>> a = np.array([[1,2,3],[4,5,6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> a.sum()
21
>>> a.sum(axis=1) #每行的和
array([ 6, 15])
>>> a.sum(axis=0) #每列的和
array([5, 7, 9])
>>> a.max()
6
>>> a.min()
1

Shape操作

>>> a = np.floor(10*np.random.random((3,4)))  #注意:floor是向下取整
>>> a
array([[ 3.,  9.,  6.,  7.],
       [ 8.,  8.,  6.,  8.],
       [ 4.,  4.,  5.,  3.]])
>>> a.shape
(3, 4)
>>>
>>> a.ravel()   #把array变成一个向量
array([ 3.,  9.,  6.,  7.,  8.,  8.,  6.,  8.,  4.,  4.,  5.,  3.])
>>> a.reshape(6,2)
array([[ 3.,  9.],
       [ 6.,  7.],
       [ 8.,  8.],
       [ 6.,  8.],
       [ 4.,  4.],
       [ 5.,  3.]])
>>> a.T  #a的转置
array([[ 3.,  8.,  4.],
       [ 9.,  8.,  4.],
       [ 6.,  6.,  5.],
       [ 7.,  8.,  3.]])
>>> a.T.shape
(4, 3)
>>> a.shape
(3, 4)
>>> a.resize((2,6)) #注意resize和reshape的区别就是,resize会改变a本身,reshape不会
>>> a
array([[ 3.,  9.,  6.,  7.,  8.,  8.],
       [ 6.,  8.,  4.,  4.,  5.,  3.]])
>>> a.reshape(3,-1) #-1表示这一维自动计算
array([[ 3.,  9.,  6.,  7.],
       [ 8.,  8.,  6.,  8.],
       [ 4.,  4.,  5.,  3.]])
>>>

拼接

>>> a = np.array([[1,2],[3,4]])
>>> a
array([[1, 2],
       [3, 4]])
>>> b = np.array([[5,6],[7,8]])
>>> b
array([[5, 6],
       [7, 8]])
>>> np.vstack((a,b))  #把b放在a下面
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])
>>> np.hstack((a,b))  #把b放在a右边
array([[1, 2, 5, 6],
       [3, 4, 7, 8]])

切分

>>> a = np.floor(10*np.random.random((2,12)))
>>>
>>> a
array([[ 4.,  2.,  8.,  8.,  6.,  2.,  5.,  3.,  4.,  7.,  1.,  9.],
       [ 4.,  4.,  9.,  8.,  0.,  1.,  2.,  1.,  3.,  6.,  7.,  2.]])
>>>
>>> np.hsplit(a,3)  #把a横向分为3份
[array([[ 4.,  2.,  8.,  8.],
       [ 4.,  4.,  9.,  8.]]), array([[ 6.,  2.,  5.,  3.],
       [ 0.,  1.,  2.,  1.]]), array([[ 4.,  7.,  1.,  9.],
       [ 3.,  6.,  7.,  2.]])]
>>> np.vsplit(a.T,3) #纵向分
[array([[ 4.,  4.],
       [ 2.,  4.],
       [ 8.,  9.],
       [ 8.,  8.]]), array([[ 6.,  0.],
       [ 2.,  1.],
       [ 5.,  2.],
       [ 3.,  1.]]), array([[ 4.,  3.],
       [ 7.,  6.],
       [ 1.,  7.],
       [ 9.,  2.]])]
>>>

零散笔记

表示array中的特定几行

>>> h
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
       [40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
       [50, 51, 52, 53, 54, 55, 56, 57, 58, 59]])
>>> mask = range(5)
>>> mask
[0, 1, 2, 3, 4]
>>> h[mask] #取 h 的0,1,2,3,4行
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
       [40, 41, 42, 43, 44, 45, 46, 47, 48, 49]])
>>>
>>> mask = range(2,5)
>>> mask
[2, 3, 4]
>>> h[mask]  #取 h 的 2,3,4 行
array([[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
       [40, 41, 42, 43, 44, 45, 46, 47, 48, 49]])

均值

>>> np.mean(h,axis=0)  #每一列的均值
array([ 25.,  26.,  27.,  28.,  29.,  30.,  31.,  32.,  33.,  34.])
>>> np.mean(h,axis=1)  #每一行的均值
array([  4.5,  14.5,  24.5,  34.5,  44.5,  54.5])

随机数

>>> w = np.random.randn(3073, 10) #生成一个随机数矩阵,随机数值在(0,1)之间,符合均匀分布
>>> w
array([[ 0.67549354,  0.90033156, -0.17879922, ...,  0.73086887,
        -1.36429038, -0.84239665],
       [ 0.63798799, -0.49243242, -0.77956457, ...,  1.13186242,
        -0.88691027, -0.59729021],
       [ 0.5981941 ,  1.0869356 , -0.52344575, ...,  0.51742916,
        -1.35772943,  0.31620054],
       ...,
       [-0.23798699,  0.4268321 ,  1.30880808, ..., -0.26957533,
         1.40720518,  1.37996847],
       [ 0.24834546, -1.16090435,  1.93973511, ...,  0.68083319,
        -0.7405012 , -0.45362532],
       [ 0.87408501,  2.2738675 , -0.14890794, ...,  0.41797693,
        -1.7666044 ,  1.33517877]])
>>> w.shape[0]
3073
>>> w.shape[1]
10

向量和数组的大小

>>> a = np.array([11,31,32,44])
>>> a.shape  #注意返回值其实是向量的长度
(4,)
>>> y
array([[3],
       [4],
       [5]])
>>> y.shape  #返回值是矩阵行数和列数
(3, 1)

矩阵减向量

>>> h
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
       [40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
       [50, 51, 52, 53, 54, 55, 56, 57, 58, 59]])
>>> a
array([[ 0],
       [10],
       [20],
       [30],
       [40],
       [50]])
>>> h-a            #矩阵减向量,相当于把向量每行扩展成矩阵宽度大小
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

用向量索引array

>>> y = np.arange(6)
>>> y
array([0, 1, 2, 3, 4, 5])
>>> h = np.arange(60).reshape(6,-1)
>>> h
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
       [40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
       [50, 51, 52, 53, 54, 55, 56, 57, 58, 59]])
>>> h[range(6),y]         #取 h 数组中(0,0),(1,1),(2,2),(3,3),(4,4),(5,5)元素
array([ 0, 11, 22, 33, 44, 55])
>>> h[range(6),y]=0     #设置对角线上的元素为0
>>> h
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
       [10,  0, 12, 13, 14, 15, 16, 17, 18, 19],
       [20, 21,  0, 23, 24, 25, 26, 27, 28, 29],
       [30, 31, 32,  0, 34, 35, 36, 37, 38, 39],
       [40, 41, 42, 43,  0, 45, 46, 47, 48, 49],
       [50, 51, 52, 53, 54,  0, 56, 57, 58, 59]])
>>> y = y.reshape(-1,1)
>>>
>>> y
array([[0],
       [1],
       [2],
       [3],
       [4],
       [5]])
>>> h[range(6),y]=1     #将0-5行0-5列的所有元素都置为1
>>> h
array([[ 1,  1,  1,  1,  1,  1,  6,  7,  8,  9],
       [ 1,  1,  1,  1,  1,  1, 16, 17, 18, 19],
       [ 1,  1,  1,  1,  1,  1, 26, 27, 28, 29],
       [ 1,  1,  1,  1,  1,  1, 36, 37, 38, 39],
       [ 1,  1,  1,  1,  1,  1, 46, 47, 48, 49],
       [ 1,  1,  1,  1,  1,  1, 56, 57, 58, 59]])

array 乘法

>>> h
array([[ 1,  1,  1,  1,  1,  1,  6,  7,  8,  9],
       [ 1,  1,  1,  1,  1,  1, 16, 17, 18, 19],
       [ 1,  1,  1,  1,  1,  1, 26, 27, 28, 29],
       [ 1,  1,  1,  1,  1,  1, 36, 37, 38, 39],
       [ 1,  1,  1,  1,  1,  1, 46, 47, 48, 49],
       [ 1,  1,  1,  1,  1,  1, 56, 57, 58, 59]])
>>> h=(h>1)*h     #小于1的都为0,大于1的不变
>>> h
array([[ 0,  0,  0,  0,  0,  0,  6,  7,  8,  9],
       [ 0,  0,  0,  0,  0,  0, 16, 17, 18, 19],
       [ 0,  0,  0,  0,  0,  0, 26, 27, 28, 29],
       [ 0,  0,  0,  0,  0,  0, 36, 37, 38, 39],
       [ 0,  0,  0,  0,  0,  0, 46, 47, 48, 49],
       [ 0,  0,  0,  0,  0,  0, 56, 57, 58, 59]])

求和

>>> c
array([[0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
       [0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
       [0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
       [0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
       [0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
       [0, 0, 0, 0, 0, 0, 1, 1, 1, 1]])
>>> np.sum(c,axis=1)   #每行之和
array([4, 4, 4, 4, 4, 4])
>>> np.sum(c,axis=0)   #每列之和
array([0, 0, 0, 0, 0, 0, 6, 6, 6, 6])

最大值最小值的索引

>>> h
array([[ 0,  0,  0,  0,  0,  0,  6,  7,  8,  9],
       [ 0,  0,  0,  0,  0,  0, 16, 17, 18, 19],
       [ 0,  0,  0,  0,  0,  0, 26, 27, 28, 29],
       [ 0,  0,  0,  0,  0,  0, 36, 37, 38, 39],
       [ 0,  0,  0,  0,  0,  0, 46, 47, 48, 49],
       [ 0,  0,  0,  0,  0,  0, 56, 57, 58, 59]])
>>> h.max(axis=0)
array([ 0,  0,  0,  0,  0,  0, 56, 57, 58, 59])
>>> h.max(axis=0)        #每列的最大值
array([ 0,  0,  0,  0,  0,  0, 56, 57, 58, 59])
>>> h.min(axis=1)        #每行的最大值
>>> np.argmax(h,axis=0)  #每列的最大值的索引
array([0, 0, 0, 0, 0, 0, 5, 5, 5, 5])
>>> np.argmax(h,axis=1)  #每行的最大值的索引
array([9, 9, 9, 9, 9, 9])

判断两个array是否相等

>>> x
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> y = np.ones((1,9))
>>> y
array([[ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.]])
>>> x==y                     #判断对应位置的元素是否相等
array([[ True, False, False, False, False, False, False, False, False]], dtype=bool)
>>> np.mean(x==y)       #对x==y的结果取均值
0.1111111111111111

去掉某些行/列

>>> h
array([[ 0,  0,  0,  0,  0,  0,  6,  7,  8,  9],
       [ 0,  0,  0,  0,  0,  0, 16, 17, 18, 19],
       [ 0,  0,  0,  0,  0,  0, 26, 27, 28, 29],
       [ 0,  0,  0,  0,  0,  0, 36, 37, 38, 39],
       [ 0,  0,  0,  0,  0,  0, 46, 47, 48, 49],
       [ 0,  0,  0,  0,  0,  0, 56, 57, 58, 59]])
>>> w=h[:-1,:]           #去掉最后一行
>>> w
array([[ 0,  0,  0,  0,  0,  0,  6,  7,  8,  9],
       [ 0,  0,  0,  0,  0,  0, 16, 17, 18, 19],
       [ 0,  0,  0,  0,  0,  0, 26, 27, 28, 29],
       [ 0,  0,  0,  0,  0,  0, 36, 37, 38, 39],
       [ 0,  0,  0,  0,  0,  0, 46, 47, 48, 49]])
>>> w = h[:-2,:]         #去掉最后两行
>>> w
array([[ 0,  0,  0,  0,  0,  0,  6,  7,  8,  9],
       [ 0,  0,  0,  0,  0,  0, 16, 17, 18, 19],
       [ 0,  0,  0,  0,  0,  0, 26, 27, 28, 29],
       [ 0,  0,  0,  0,  0,  0, 36, 37, 38, 39]])
>>> w = h[:,:-4]         #去掉最后4列
>>> w
array([[0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0]])
>>> w = h[:,:4]        #得到前四列
>>> w
array([[0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]])
原文地址:https://www.cnblogs.com/lxb0478/p/8303040.html