Numpy
ndarray对象
包含相同类型数据的数组
主要属性:
size: 数组中元素的总个数
dtype: 数组数据类型
shape: 数组形状,各维度大小,元组
ndim: 数组维数
创建方法:
array:
asarray:
zeros,ones,eyes,empty: 0,1,对角1,不初始
arange: (start,stop,step,dtype),不包含stop
linspace: (start,stop,num=50,endpoint=True)
logspace: (start,stop,num=50,endpoint=True,base=10)
广播机制:
不同形状数组运算时启用广播机制,规则如下:
- 比较数组维度,维度小的在前面补1对齐维度,如(4,3)+(3,),补齐为(1,3)
- 比较各维度,若数组维度相等或者有一个数组维度为1,可以运算,维度为1时会复制第一组值扩充至对应维度
数组操作
- reshape
: np.reshape(arr,newshape,order)
这里的order指的是数据的排列顺序,一般是按’C’即行排列,也可以指定按’F’排列
import numpy as np
a = np.arange(1, 10, 1).reshape((3, -1))
b = np.arange(1, 10, 1).reshape((3, -1), order='C')
c = np.arange(1, 10, 1).reshape((3, -1), order='F')
print(a, '\n\n', b, '\n\n', c)
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
#
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
#
# [[1 4 7]
# [2 5 8]
# [3 6 9]]
- ravel :
ravel(arr,order),按指定顺序展平数组,(不太懂有啥用)
- transpose,T :
倒置数组,同样可以输入order参数
- expand_dims :
扩充数组,加入新的轴,newaxis更简洁
import numpy as np
a = np.array([1, 2, 3])
b = np.expand_dims(a, axis=0)
c = a[np.newaxis, :]
d = np.expand_dims(a, axis=1)
e = a[:,np.newaxis]
print(a.shape, b.shape, c.shape, d.shape, e.shape)
# (3,) (1, 3) (1, 3) (3, 1) (3, 1)
- squeeze :
删除数组中维度为1的维度
import numpy as np
a = np.array([1, 2, 3])
b = np.expand_dims(a, axis=0)
c = a[np.newaxis, :, np.newaxis]
d = b.squeeze()
e = c.squeeze()
print(a.shape, b.shape, c.shape, d.shape, e.shape)
# (3,) (1, 3) (1, 3, 1) (3,) (3,)
- vstack,hstack :
垂直、水平连接数组
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
c = np.vstack((a, b))
d = np.hstack((a, b))
print(c, '\n', d)
# [[1 2]
# [3 4]
# [5 6]
# [7 8]]
# [[1 2 5 6]
# [3 4 7 8]]
- append :
只能通过np.append(arr, values, axis)调用,大小必须相同,不指定axis返回一维数组
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(np.append(a, b))
print(np.append(a, b, axis=0))
print(np.append(a, b, axis=1))
# [1 2 3 4 5 6 7 8]
#
# [[1 2]
# [3 4]
# [5 6]
# [7 8]]
#
# [[1 2 5 6]
# [3 4 7 8]]
- around :
np.around(arr,decimals) arr:数组 decimals:小数位数
- ceil,floor :
ceil:向上取整,floor:向下取整
数组排序及筛选
- sort :
np.sort(arr,axis,kind,order),kind是排序方法,默认‘quicksort’,还有‘mergesort’、‘heapsort’。不指定axis会按照最后一个维度排序
- argsort :
形式跟sort没有较大差别,返回的是排序后的元素索引
import numpy as np
a = np.arange(10, 0, -1)
print(a)
print(np.sort(a))
print(np.argsort(a))
# [10 9 8 7 6 5 4 3 2 1]
# [ 1 2 3 4 5 6 7 8 9 10]
# [9 8 7 6 5 4 3 2 1 0]
- where :
np.where(condition)——返回满足条件的元素索引
- extract :
np.extract(condition,x)——返回满足要求的元素
矩阵代数
Numpy中还有矩阵对象,矩阵库为numpy.matlib,可用此库创建矩阵,也可以用np.mat(arr)创建矩阵
Numpy中矩阵运算库linalg,包含线性代数许多函数,需要时可查相关文档
- dot :
点乘,同.*,对于数组而言跟matlab里运算类似
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(a * b)
print(np.dot(a, b))
print(np.matmul(a, b))
a = np.mat(a)
b = np.mat(b)
print(a * b)
print(np.dot(a, b))
print(np.matmul(a, b))
# [[ 5 12]
# [21 32]]
#
# [[19 22]
# [43 50]]
#
# [[19 22]
# [43 50]]
#
# [[19 22]
# [43 50]]
#
# [[19 22]
# [43 50]]
#
# [[19 22]
# [43 50]]