contents
numpy
numpy数组基本信息
数组的维数: array.ndim
数组的shape:array.shape
数组的size:array.size
numpy创建数组
a=np.array(list,dtpye)
dtype:定义格式,eg:np.int,np.float,可通过a.dtype查询
打印出来和列表不同的是,他没有逗号
a=np.array([1,2,3])
print(a) #[1 2 3]
b=[1,2,3]
print(b) #[1, 2, 3]
创建指定行数和列数的数组
np.ones((row,line)) 要用括号括起来
同样可用在np.ones((row,line)) ,np.empty((row,line))
还可a.reshape((row,line))
np.arange()和np.linspace()
np.arange()类似range(start,end,step)包头不包尾
np.linspace(start,end,n)生成线段,最后一个参数表示生成的段数,返回每段的长度
numpy 的运算
乘法
a*b | np.dot(a,b)或a.dot(b) |
---|---|
对应元素相乘 | 矩阵的乘法 |
返回索引
np.argmin(a)
a=np.linspace(1,20,9).reshape(3,3)
print(np.argmax(a)) #8
求和axis
np.sum(a,axis=0)默认axis=1表示按行,axis=0表示列,不加的话表示整个数组
也可a.sum(axis=0)
cumsum,diff,nonzero,sort,transpose,clip
a=np.linspace(1,20,9).reshape(3,3)
# 累加求和
print(a.cumsum()) #[ 1. 4.375 10.125 18.25 28.75 41.625 56.875 74.5 94.5 ]
#相邻两数字差
a=np.linspace(1,20,9).reshape(3,3)
print(np.diff(a))
# [[2.375 2.375]
# [2.375 2.375]
# [2.375 2.375]]
#非零元素所在行列
a=np.linspace(1,20,9).reshape(3,3)
print(np.nonzero(a))
# (array([0, 0, 0, 1, 1, 1, 2, 2, 2], dtype=int64), array([0, 1, 2, 0, 1, 2, 0, 1, 2], dtype=int64))
# 逐行进行排序
a=np.arange(10,1,-1).reshape(3,3)
print(np.sort(a))
# [[ 8 9 10]
# [ 5 6 7]
# [ 2 3 4]]
#矩阵的转置
a=np.arange(10,1,-1).reshape(3,3)
np.transpose(a) #也可a.T
# array([[10, 7, 4],
# [ 9, 6, 3],
# [ 8, 5, 2]])
#小于5的数变5,大于9的数,变9
a=np.arange(1,10).reshape(3,3)
print(np.clip(a,3,7))
# [[3 3 3]
# [4 5 6]
# [7 7 7]]
numpy 产生随机数
np.random.random((row,line))
根据索引找值
两种方式 array[row][line]或者array[row,line]
按行拉直
array.flatten()返回数组,array.flat返回迭代器
a=np.arange(1,10).reshape(3,3)
print(a.flatten()) #[1 2 3 4 5 6 7 8 9]
print(a.flat) #<numpy.flatiter object at 0x00000299B6234960>
把横向数列变成纵向的
在行上增加一个维度array[np.newaxis,:]
在列上增加一个维度array[:,np.newaxis]
a=np.arange(3)
print(a[np.newaxis,:].shape) #(1, 3)
print(a[np.newaxis,:]) #[[0 1 2]]
print(a[:,np.newaxis].shape) #(3,1)
print(a[:,np.newaxis])
# [[0]
# [1]
# [2]]
numpy 的合并
垂直合并np.vstack((array1,array2))
水平合并np.hstack((array1,array2))
a=np.ones((1,4))
b=np.zeros((1,4))
#vertical stack
c=np.vstack((a,b))
print(a.shape,b.shape,c.shape) # (1, 4) (1, 4) (2, 4)
print(c)
# [[1. 1. 1. 1.]
# [0. 0. 0. 0.]]
#horizontal stack
c=np.hstack((a,b))
print(a.shape,b.shape,c.shape) #(1, 4) (1, 4) (1, 8)
print(c)
# [[1. 1. 1. 1. 0. 0. 0. 0.]]
用concatenate指定维度合并
axis=0相当于vstack
axis=1相当于hstack
a=np.ones((1,4))
b=np.zeros((1,4))
c=np.concatenate((a,b,a),axis=0)
print(c)
# [[1. 1. 1. 1.]
# [0. 0. 0. 0.]
# [1. 1. 1. 1.]]
numpy 的分割
等量分割
np.split(array,n_part,axis=0)
n_part表示分成几个部分,
axis=0表示按行分割,相当于np.vsplit(a,2)
axis=1按列分割,相当于np.hsplit(a,2)
a=np.arange(8).reshape(2,4)
#按行分割
print(np.split(a,2,axis=0)) #也可用np.vsplit(a,2)
# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]])]
#按列分割
print(np.split(a,2,axis=1)) #也可用np.hsplit(a,2)
# [array([[0, 1],
# [4, 5]]), array([[2, 3],
# [6, 7]])]
不等量分割
print(np.array_split(a,3,axis=1))
# [array([[0, 1],
# [4, 5]]), array([[2],
# [6]]), array([[3],
# [7]])]
numpy 的copy
b=a,a和b所指向的是同一个对象
b=a.copy,相当于deepcopy