目录
2.4 hstack,vstack,dstack,stack详解
一,改变数组的维度和形状
通过reshape方法可以将一维数组变成二维、三维或者多维数组, 也可以通过reshape方法将多维数组变成一维。注意:reshape的ndarray对象的实例方法。
通过ravel方法或flatten方法可以将多维数组变成一维数组。
改变数组的维度还可以直接设置Numpy数组的shape属性(元组类型),通过resize方法也可以改变数组的维度,resize方法的参数是一个元组。
import numpy as np
# 创建一维的数组
a = np.arange(24)
# 使用reshape将一维数组变成三维数组
b = a.reshape(2, 3, 4) # 2x3x4=24
# 将a变成二维数组
c = a.reshape(3, 8)
# 将多维数组变成一维数组
print(c.reshape(-1))
##############################################
# 使用ravel函数将三维的b变成一维的数组
a1 = b.ravel()
# 使用flatten函数将二维的c变成一维的数组
a2 = c.flatten()
# 使用shape属性将三维的b变成二维数组(6行4列)
b.shape = (6, 4)
# 使用resize修改数组的维度
b.resize((2, 12))
二,矩阵的拼接
2.1 图解矩阵的拼接
由下图可知,矩阵的拼接需要格式相同,行数或者列数至少有一个要一致。
2.2 拼接方法一览
2.3 concatenate函数详解
语法格式:np.concatenate((a1, a2, ...), axis),axis取0,1,2,……,表示每个维度的轴x,y,z……。a1,a2,a3,……是形状相同的数组。
import numpy as np
x = np.arange(1, 4)
y = np.arange(4, 7)
print(np.concatenate((x, y), axis=0))
2.4 hstack,vstack,dstack,stack详解
hstack,vstack,dstack分别对应水平,垂直,正交三个方向的拼接。dstack在三维矩阵的第三个方向进行拼接。
stack()函数的原型是numpy.stack(arrays, axis=0),即将一堆数组的数据按照指定的方向进行堆叠。参数如下:stack([a1,a2,……],axis),stack的axis只能取0和1,因为stack只能用一维数组拼二维矩阵。
vstack,dstack,stack已经指定了拼接方向,参数如下:([a1,a2,……])。
注意:上述所有方法返回的都是ndarray矩阵对象。
三,矩阵的转置
3.1 图解矩阵转置
即:行列互换。
3.2 transpose方法|函数实现转置
import numpy as np
# transpose进行转置
# 二维转置
a = np.arange(1, 13).reshape(2, 6)
print('原数组a')
print(a)
print('转置后的数组')
print(a.transpose()) # 作为ndarray对象的实例方法,也可以使用np.transcope()函数
print(a.T)
一般只进行二维矩阵的转置。二维矩阵的转置也可以使用np.transcope()函数,参数如下:(ndarray,(1,0)),第二个参数是一个元组,一般为(1,0)表示x和y互换。
四,数组的分隔
4.1 图解数组的分隔
注意:分隔之后将结果放入一个列表返回,列表的每个元素的类型为ndarray。
4.2 numpy.split实现行矩阵分隔
函数详解:numpy.split(ary, indices_or_sections, axis)。
ary:被分隔的对象;
indices_or_sections:如果是一个整数,就用该数平均切分(需要确保能够被整分)。如果是一个数组,为沿轴切分的位置 (左开右闭), 如indices_or_sections=[2,5]表示把ary从0-2分一份,2-5分一份,5至-1为一份。
axis:轴的序号。当分隔二维矩阵时,需要指定axis=0或者1。
import numpy as np
x = np.arange(1, 9)
a = np.split(x, 4)
print(a)
print(a[0])
print(a[1])
print(a[2])
print(a[3])
# 传递数组进行分隔
b = np.split(x, [3, 5])
print(b)
# [array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]
# [1 2]
# [3 4]
# [5 6]
# [7 8]
# [array([1, 2, 3]), array([4, 5]), array([6, 7, 8])
4.3 hsplit,vsplit分隔矩阵
用于分隔矩阵,他们的参数,(ary,x:int),需注意可被int整分。他们已经指定了axis的值。
五,数学函数
由于numpy是基于矩阵进行运算,所以numpy的数学函数会自动将矩阵中的数据进行遍历运算,即使是二维矩阵也会全部遍历。
5.1 数学函数一览
5.2 演示例子
import numpy as np
x = np.arange(1, 9, dtype=float)
print(np.reciprocal(x))
y = np.arange(1, 13, dtype=float).reshape(3, 4)
print(np.reciprocal(y))
六,算数函数
算数运算符+,-,x,/,**,%等实际上都是函数实现的。如果参与运算的两个对象都是ndarray,并且形状相同,那么会对彼此之间进行(+ - * /)运算。注意进行运算的前提是:两个或多个矩阵满足运算的shape。
NumPy 算术函数包含简单的加减乘除: add(),subtract(),multiply()。即:+对于add,-对于substact……。
注意这里的运算只是矩阵对应元素的加减乘除,并不是线性代数中的矩阵乘法。线代中的矩阵乘法使用matmul(a1,a2)或者点乘np.(a1,a2)。
import numpy as np
a = np.arange(9, dtype=np.float).reshape(3, 3)
b = np.array([10, 10, 10])
print(np.add(a, b))
print(a + b)
print(np.subtract(a, b))
print(a - b)
print(np.multiply(a, b))
print(a * b)
print(np.divide(a, b))
print(a / b)
out参数的使用,当需要接受计算结果时,用out指定一个empty矩阵的进行接受即可。
x = np.arange(5)
y = np.empty_like(x)
np.multiply(x, 10, out=y)
print(y)
numpy.mod() 计算输入数组中相应元素的相除后的余数。函数 numpy.remainder() 也产生相同的结果。
七,统计函数
7.1 统计函数一览
7.2 各种函数使用方法举例
import numpy as np
# power()函数的使用
x = np.arange(1, 5)
y = np.empty_like(x)
np.power(x, 2, out=y)
print(y)
# median ()函数的使用
a = np.array([4, 2, 1, 5])
# 计算偶数的中位数
print('偶数的中位数:', np.median(a))
a = np.array([4, 2, 1])
print('奇数个的中位数:', np.median(a))
a = np.arange(1, 16).reshape(3, 5)
print('调用median函数')
print(np.median(a))
print('调用median函数,axis=1 行的中值')
print(np.median(a, axis=1))
print('调用median函数,axis=0 列的中值')
print(np.median(a, axis=0))
# mean()函数的使用
a = np.arange(1, 11).reshape(2, 5)
print(np.mean(a))
print('调用mean函数 axis=0 列')
print(np.mean(a, axis=0))
print('调用mean函数 axis=1 行')
print(np.mean(a, axis=1))
# 函数的使用
a = np.random.randint(10, 50, size=20)
np.max(a)
np.sum(a)
np.min(a)
np.max(a)
np.ptp(a)
np.unique(a)
np.nonzero(a)