numpy查漏补缺

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

上一篇:numpy系列(5)-索引、切片、排序、搜索和计数


下一篇:numpy系列(2)-数组的基本操作