### 文章目录

• 简介
• 简单函数
• 矢量化数组运算
• 条件逻辑表达式
• 统计方法
• 布尔数组
• 排序
• 文件
• 线性代数
• 随机数

arr = np.arange(10)

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])


np.sqrt(arr)

array([0.    , 1.    , 1.4142, 1.7321, 2.    , 2.2361, 2.4495, 2.6458,
2.8284, 3.    ])


np.exp(arr)

array([   1.    ,    2.7183,    7.3891,   20.0855,   54.5982,  148.4132,
403.4288, 1096.6332, 2980.958 , 8103.0839])


x = np.random.randn(8)
y = np.random.randn(8)
x,y

(array([-2.3594, -0.1995, -1.542 , -0.9707, -1.307 ,  0.2863,  0.378 ,
-0.7539]),
array([ 0.3313,  1.3497,  0.0699,  0.2467, -0.0119,  1.0048,  1.3272,
-0.9193]))

np.maximum(x, y)

array([ 0.3313,  1.3497,  0.0699,  0.2467, -0.0119,  1.0048,  1.3272,
-0.7539])


arr = np.random.randn(7) * 5

array([-7.7455,  0.1109,  3.7918, -3.3026,  4.3129, -0.0502,  0.25  ])

remainder, whole_part = np.modf(arr)

(array([-0.7455,  0.1109,  0.7918, -0.3026,  0.3129, -0.0502,  0.25  ]),
array([-7.,  0.,  3., -3.,  4., -0.,  0.]))


import numpy as np
import matplotlib.pyplot as plt

x = np.array([[0, 1, 2], [0, 1, 2]])
y = np.array([[0, 0, 0], [1, 1, 1]])

plt.plot(x, y,
color='green',
marker='.',
linestyle='')
plt.grid(True)
plt.show()


Y也是一个二维数组，表示的是坐标点的Y轴的位置。

x = np.array([0,1,2])
y = np.array([0,1])

xs, ys = np.meshgrid(x, y)
xs,ys
(array([[0, 1, 2],
[0, 1, 2]]),
array([[0, 0, 0],
[1, 1, 1]]))


np.sqrt(xs ** 2 + ys ** 2)


array([[0.        , 1.        , 2.        ],
[1.        , 1.41421356, 2.23606798]])


xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])


result = [(x if c else y)
for x, y, c in zip(xarr, yarr, cond)]
result

[1.1, 2.2, 1.3, 1.4, 2.5]


result = np.where(cond, xarr, yarr)
result

array([1.1, 2.2, 1.3, 1.4, 2.5])


arr = np.random.randn(4, 4)
arr
array([[ 0.7953,  0.1181, -0.7485,  0.585 ],
[ 0.1527, -1.5657, -0.5625, -0.0327],
[-0.929 , -0.4826, -0.0363,  1.0954],
[ 0.9809, -0.5895,  1.5817, -0.5287]])



np.where(arr > 0, 2, -2)
array([[ 2,  2, -2,  2],
[ 2, -2, -2, -2],
[-2, -2, -2,  2],
[ 2, -2,  2, -2]])


numpy提供了mean，sum等统计方法：

arr = np.random.randn(5, 4)
arr
arr.mean()
np.mean(arr)
arr.sum()


arr.mean(axis=1)
arr.sum(axis=0)


cumsum进行累加计算：

arr = np.array([0, 1, 2, 3, 4, 5, 6, 7])
arr.cumsum()

array([ 0,  1,  3,  6, 10, 15, 21, 28])


cumprod进行累乘计算：

arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
arr
arr.cumsum(axis=0)

array([[ 0,  1,  2],
[ 3,  5,  7],
[ 9, 12, 15]])

arr.cumprod(axis=1)

array([[  0,   0,   0],
[  3,  12,  60],
[  6,  42, 336]])


any用于测试数组中是否存在一个或多个True，而all则检查数组中所有值是否都是True:

bools = np.array([False, False, True, False])
bools.any()
True

bools.all()
False


arr = np.random.randn(6)
arr.sort()

array([-2.5579, -1.2943, -0.2972, -0.1516,  0.0765,  0.1608])

arr = np.random.randn(5, 3)
arr
arr.sort(1)
arr

array([[-0.8852, -0.4936, -0.1875],
[-0.3507, -0.1154,  0.0447],
[-1.1512, -0.8978,  0.8909],
[-2.6123, -0.8671,  1.1413],
[-0.437 ,  0.3475,  0.3836]])


sort(1)指的是按照第二个轴来排序。

arr = np.arange(10)
np.save('some_array', arr)


np.load('some_array.npy')


np.savez('array_archive.npz', a=arr, b=arr)


arch = np.load('array_archive.npz')
arch['b']


np.savez_compressed('arrays_compressed.npz', a=arr, b=arr)


x = np.array([[1., 2., 3.], [4., 5., 6.]])
y = np.array([[6., 23.], [-1, 7], [8, 9]])
x
y
x.dot(y)

array([[ 28.,  64.],
[ 67., 181.]])


np.dot(x, y)

array([[ 28.,  64.],
[ 67., 181.]])


x @ y

array([[ 28.,  64.],
[ 67., 181.]])


dot(a, b[, out]) 矩阵点积
linalg.multi_dot(arrays, *[, out]) 多个矩阵点积
vdot(a, b) 向量点积
inner(a, b) 两个数组的内积
outer(a, b[, out]) 两个向量的外积
matmul(x1, x2, /[, out, casting, order, …]) 两个矩阵的对应位的乘积
tensordot(a, b[, axes]) 计算沿指定轴的张量点积
einsum(subscripts, *operands[, out, dtype, …]) 爱因斯坦求和约定
einsum_path(subscripts, *operands[, optimize]) 通过考虑中间数组的创建，评估einsum表达式的最低成本收缩顺序。
linalg.matrix_power(a, n) 矩阵的幂运算
kron(a, b) 矩阵的Kronecker乘积

linalg.cholesky(a) Cholesky 分解
linalg.qr(a[, mode]) 计算矩阵的qr因式分解
linalg.svd(a[, full_matrices, compute_uv, …]) 奇异值分解

linalg.eig(a) 计算方阵的特征值和右特征向量。
linalg.eigh(a[, UPLO]) 返回复数Hermitian（共轭对称）或实对称矩阵的特征值和特征向量。
linalg.eigvals(a) 计算通用矩阵的特征值。
linalg.eigvalsh(a[, UPLO]) 计算复数Hermitian（共轭对称）或实对称矩阵的特征值。

linalg.norm(x[, ord, axis, keepdims]) 矩阵或向量范数
linalg.cond(x[, p]) Compute the condition number of a matrix.
linalg.det(a) 矩阵行列式
linalg.matrix_rank(M[, tol, hermitian]) 使用SVD方法返回数组的矩阵秩
linalg.slogdet(a) 计算数组行列式的符号和（自然）对数。
trace(a[, offset, axis1, axis2, dtype, out]) 返回沿数组对角线的和。

linalg.solve(a, b) 求解线性矩阵方程或线性标量方程组。
linalg.tensorsolve(a, b[, axes]) 对x求解张量方程’a x = b’。
linalg.lstsq(a, b[, rcond]) 将最小二乘解返回线性矩阵方程
linalg.inv(a) 计算矩阵的（乘法）逆。
linalg.pinv(a[, rcond, hermitian]) 计算矩阵的（Moore-Penrose）伪逆。
linalg.tensorinv(a[, ind]) 计算N维数组的“逆”。

samples = np.random.normal(size=(4, 4))
samples

array([[-2.0016, -0.3718,  1.669 , -0.4386],
[-0.5397,  0.477 ,  3.2489, -1.0212],
[-0.5771,  0.1241,  0.3026,  0.5238],
[ 0.0009,  1.3438, -0.7135, -0.8312]])


np.random可以指定生成随机数的种子：

np.random.seed(1234)


numpy.random的数据生成函数使用了全局的随机种子。要避免 全局状态，你可以使用numpy.random.RandomState，创建一个 与其它隔离的随机数生成器：

rng = np.random.RandomState(1234)
rng.randn(10)