创建
numpy.array
nparr = np.array([i for i in range(10)])
nparr
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
nparr2 = np.array([1, 2, 3.0])
nparr2.dtype
numpy.array其他创建方式
np.zeros(10, dtype = int)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
np.zeros(shape = (3,5), dtype = int)
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
np.ones(shape = (3,5), dtype = int)
array([[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]])
np.full(shape = (3,5), fill_value = 666)
array([[666, 666, 666, 666, 666],
[666, 666, 666, 666, 666],
[666, 666, 666, 666, 666]])
numpy.arange
np.arange(0, 20, 2) # 用法同range()
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
np.arange(1, 5, 0.5) # 可以设置步长为浮点数
array([1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])
numpy.linspace
np.linspace(0, 20, 11) # 0 到 20 等长的截取出 11个点
array([ 0., 2., 4., 6., 8., 10., 12., 14., 16., 18., 20.])
numpy.random
np.random.randint(0, 10) # 0 到 10 随机数
np.random.randint(0, 10, size = 5) # 0 到 10 5个随机数
np.random.randint(0, 10, size = (3, 5)) # 0 到 10 5个随机数
array([[5, 6, 5, 5, 5],
[0, 0, 8, 0, 6],
[8, 7, 0, 3, 9]])
np.random.seed(123) # 设置随机种子
np.random.randint(0, 10, size = (3, 5)) # 0 到 10 5个随机数
array([[2, 2, 6, 1, 3],
[9, 6, 1, 0, 1],
[9, 0, 0, 9, 3]])
np.random.random() # 0 到 1 随机数
np.random.random(10) # 0 到 1 10个随机数
array([0.69475518, 0.5939024 , 0.63179202, 0.44025718, 0.08372648,
0.71233018, 0.42786349, 0.2977805 , 0.49208478, 0.74029639])
np.random.random((3, 5)) # 0 到 1 矩阵随机数
array([[0.35772892, 0.41720995, 0.65472131, 0.37380143, 0.23451288],
[0.98799529, 0.76599595, 0.77700444, 0.02798196, 0.17390652],
[0.15408224, 0.07708648, 0.8898657 , 0.7503787 , 0.69340324]])
np.random.normal() # 均值为0,方差为1 的正态分布的随机数
np.random.normal(10, 100) # 均值为10,方差为100 的正态分布的随机数
np.random.normal(0, 1, (3, 5)) # 均值为0,方差为1 的正态分布的随机数矩阵
array([[ 0.73860005, -0.50777635, 0.22799089, -1.74042135, -0.5345051 ],
[-0.93774867, -1.48630088, -0.02936315, -1.23714237, 0.07598604],
[-1.94519772, -0.23484041, -1.81456729, 0.05963647, -0.39763149]])
操作
numpy.array
X = np.arange(15).reshape(3, 5)
X
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
基本属性
数据访问
array([[0, 1, 2],
[5, 6, 7]])
array([[14, 13, 12, 11, 10],
[ 9, 8, 7, 6, 5],
[ 4, 3, 2, 1, 0]])
subX = X[:2, :3].copy() # 深拷贝
subX
array([[0, 1, 2],
[5, 6, 7]])
reshape
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11],
[12, 13, 14]])
X.reshape(1, -1) # 重置维度 不考虑为 -1
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]])
合并操作
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
np.concatenate([x, y])
array([1, 2, 3, 4, 5, 6])
np.concatenate([X, X]) # 只能拼接相同维数的矩阵
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
np.concatenate([X, X], axis = 1) # axis 为拼接方向 默认为0
array([[ 0, 1, 2, 3, 4, 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14, 10, 11, 12, 13, 14]])
np.vstack([x, y]) # 参数为列表 垂直拼接
array([[1, 2, 3],
[4, 5, 6]])
array([1, 2, 3, 4, 5, 6])
分割操作
z = np.arange(10)
np.split(z, [3, 7]) # 第二个参数为分割点
[array([0, 1, 2]), array([3, 4, 5, 6]), array([7, 8, 9])]
np.split(X, [1], axis = 1) # 水平分割矩阵
[array([[ 0],
[ 5],
[10]]), array([[ 1, 2, 3, 4],
[ 6, 7, 8, 9],
[11, 12, 13, 14]])]
np.vsplit(X, [2]) # 垂直分割矩阵
[array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]]), array([[10, 11, 12, 13, 14]])]
np.hsplit(X, [2]) # 水平分割矩阵
[array([[ 0, 1],
[ 5, 6],
[10, 11]]), array([[ 2, 3, 4],
[ 7, 8, 9],
[12, 13, 14]])]
运算
Universal Functions
array([1, 2, 3], dtype=int32)
array([ 4, 16, 36], dtype=int32)
array([ 0.90929743, -0.7568025 , -0.2794155 ])
b = x.reshape(3,1)
b.dot(y.reshape(1,3)) # 点乘
array([[ 4, 5, 6],
[ 8, 10, 12],
[12, 15, 18]])
array([[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12],
[ 3, 8, 13],
[ 4, 9, 14]])
向量和矩阵运算
v = np.array([1,2]) # 维数 自动匹配
b + v
array([[2, 3],
[3, 4],
[4, 5]])
array([[1, 2, 1, 2, 1, 2],
[1, 2, 1, 2, 1, 2]])
A = np.tile(v, (2, 1))
np.linalg.inv(A) # 逆矩阵
np.linalg.pinv(A) # 伪逆矩阵
聚合操作
np.sum(X, axis = 0) # 矩阵每列求和
array([15, 18, 21, 24, 27])
np.sum(X, axis = 1) # 矩阵每行求和
np.percentile(a, q = 50) # 百分位
索引
array([0, 1, 2], dtype=int64)
Fancy Indexing
l = np.arange(10)
ind = [2, 3, 5]
l[ind]
row = np.array([0, 1, 2])
col = np.array([1, 2, 3])
X[row, col]
col = [True, False, True, True, True]
X[:2, col]
array([[0, 2, 3, 4],
[5, 7, 8, 9]])
array([[ True, True, True, True, True],
[False, False, False, False, False],
[False, False, False, False, False]])