NumPy 是 Python 语言的一个扩展程序库。支持高阶大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
numpy
shape
size
dtype
使用 numpy 的其他方法来创建 array
通常,数组的元素最初是未知的,但它的大小是已知的。因此,NumPy 提供了几个函数来创建具有初始占位符内容的数组。这就减少了数组增长的必要,因为 数组增长的操作花费很大 。
array, zeros, zeros_like, ones, ones_like, empty, empty_like, arange, linspace, numpy.random.rand, numpy.random.randn, fromfunction, fromfile
配合 reshape 使用
如果在 reshape 操作中将维度指定为-1,则会自动计算其他维度
reshape and resize `s return
将不同数组堆叠在一起
vstack,hstack
数组打印
- 最后一个轴从左到右打印,
- 倒数第二个从上到下打印,
- 其余的也从上到下打印,每个切片与下一个用空行分开。
注意事项
使用多个数值参数调用 array 函数,而不是提供一个数字列表(List)作为参数。
>>> a = np.array(1,2,3,4) # WRONG
>>> a = np.array([1,2,3,4]) # RIGHT
array 的常用函数
dot
unique
sum
max\min
all, any, apply_along_axis, argmax, argmin, argsort, average, bincount, ceil, clip, conj, corrcoef, cov, cross, cumprod, cumsum, diff, dot, floor, inner, inv, lexsort, max, maximum, mean, median, min, minimum, nonzero, outer, prod, re, round, sort, std, sum, trace, transpose, var, vdot, vectorize, where
I/O
np.save(‘one_array’,x)
np.load(‘one_array.npz’)
np.savez(‘two_array’,a=x,b=y)
c = np.load(‘two_array.npz’)
c[‘a’],c[‘b’]
矩阵
创建矩阵
np.mat([[1,2,3],[4,5,6])
np.mat(array) # 数组转换
矩阵运算
满足基本的矩阵运算, 乘法运算时要注意行列约束
访问
- 按位索引
- 切片访问(二维数组的切片)
多维(Multidimensional) 数组每个轴可以有一个索引。
当提供比轴数更少的索引时,缺失的索引被认为是一个完整切片
e.g.
b[-1]
迭代(Iterating) 多维数组是相对于第一个轴完成的
但是,如果想要对数组中的每个元素执行操作,可以使用 flat 属性,该属性是数组中所有元素的迭代器
for element in b.flat:
print(element)
Indexing, Indexing (reference), newaxis, ndenumerate, indices
形状操作
一个数组具有由每个轴上的元素数量给出的形状:
>>> a = np.floor(10*np.random.random((3,4)))
>>> a
array([[ 2., 8., 0., 6.],
[ 4., 5., 1., 1.],
[ 8., 9., 3., 6.]])
>>> a.shape
(3, 4)
对于任何输入数组,函数 row_stack 相当于 vstack。一般来说,对于具有两个以上维度的数组,hstack 沿第二轴堆叠,vstack 沿第一轴堆叠,concatenate 允许一个可选参数,给出串接应该发生的轴。
将一个数组分成几个较小的数组
使用 hsplit ,可以沿其水平轴拆分数组,通过指定要返回的均匀划分的数组数量,或通过指定要在其后进行划分的列:
vsplit 沿纵轴分割,并且 array_split 允许指定沿哪个轴分割。
深拷贝\浅拷贝
简单赋值不会创建数组对象或其数据的拷贝。
Python 将可变对象作为引用传递,所以函数调用不会复制。
不同的数组对象可以共享相同的数据。 view 方法创建一个新的数组对象,它查看相同的数据。
copy 方法生成数组及其数据的完整拷贝。
fancy indexing
附录
数学运算 ufunc
方法 | 描述 |
---|---|
add(x1, x2, /[, out, where, casting, order, …]) | 按元素添加参数。 |
subtract(x1, x2, /[, out, where, casting, …]) | 从元素方面减去参数。 |
multiply(x1, x2, /[, out, where, casting, …]) | 按元素计算多个参数。 |
divide(x1, x2, /[, out, where, casting, …]) | 逐个元素方式返回输入的真正除法。 |
logaddexp(x1, x2, /[, out, where, casting, …]) | 输入的指数之和的对数。 |
logaddexp2(x1, x2, /[, out, where, casting, …]) | 以-2 为基的输入的指数和的对数。 |
true_divide(x1, x2, /[, out, where, …]) | 以元素方式返回输入的真正除法。 |
floor_divide(x1, x2, /[, out, where, …]) | 返回小于或等于输入除法的最大整数。 |
negative(x, /[, out, where, casting, order, …]) | 数字否定,元素方面。 |
positive(x, /[, out, where, casting, order, …]) | 数字正面,元素方面。 |
power(x1, x2, /[, out, where, casting, …]) | 第一个数组元素从第二个数组提升到幂,逐个元素。 |
remainder(x1, x2, /[, out, where, casting, …]) | 返回除法元素的余数。 |
mod(x1, x2, /[, out, where, casting, order, …]) | 返回除法元素的余数。 |
fmod(x1, x2, /[, out, where, casting, …]) | 返回除法的元素余数。 |
divmod(x1, x2[, out1, out2], / [[, out, …]) | 同时返回逐元素的商和余数。 |
absolute(x, /[, out, where, casting, order, …]) | 逐个元素地计算绝对值。 |
fabs(x, /[, out, where, casting, order, …]) | 以元素方式计算绝对值。 |
rint(x, /[, out, where, casting, order, …]) | 将数组的元素舍入为最接近的整数。 |
sign(x, /[, out, where, casting, order, …]) | 返回数字符号的元素指示。 |
heaviside(x1, x2, /[, out, where, casting, …]) | 计算 Heaviside 阶跃函数。 |
conj(x, /[, out, where, casting, order, …]) | 以元素方式返回复共轭。 |
exp(x, /[, out, where, casting, order, …]) | 计算输入数组中所有元素的指数。 |
exp2(x, /[, out, where, casting, order, …]) | 计算输入数组中所有 p 的 2**p。 |
log(x, /[, out, where, casting, order, …]) | 自然对数,元素方面。 |
log2(x, /[, out, where, casting, order, …]) | x 的基数为 2 的对数。 |
log10(x, /[, out, where, casting, order, …]) | 以元素方式返回输入数组的基数 10 对数。 |
expm1(x, /[, out, where, casting, order, …]) | 计算数组中所有元素的 exp(x)-1。 |
log1p(x, /[, out, where, casting, order, …]) | 返回一个加上输入数组的自然对数,逐个元素。 |
sqrt(x, /[, out, where, casting, order, …]) | 以元素方式返回数组的正平方根。 |
square(x, /[, out, where, casting, order, …]) | 返回输入的元素方块。 |
cbrt(x, /[, out, where, casting, order, …]) | 以元素方式返回数组的立方根。 |
reciprocal(x, /[, out, where, casting, …]) | 以元素为单位返回参数的倒数。 |