一、np.vstack函数概述
在Python中有很多数学计算库可以使用。而numpy作为最常用的计算库之一,其拥有强大的数组操作和数据处理能力。其中,np.vstack函数就是numpy中的一种介于数组拼接和平移之间的函数。它可以将多个数组以垂直方向堆叠在一起,返回一个新的数组。
下面我们通过实例,来深入理解这个函数:
import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.concatenate((a, b), axis=0) print(c) d = np.vstack((a, b)) print(d)
这里我们首先定义a、b两个一维数组。之后通过np.concatenate()函数将a、b按照axis=0(即纵向)拼接在一起,得到c=[1, 2, 3, 4, 5, 6]。 可以看到,这种操作并没有改变a、b原来的维度,而是合并了它们的元素。
下面用同样的a、b数组,我们将其通过np.vstack()函数进行垂直方向的堆叠,得到d=[[1,2,3],[4,5,6]]。这是一个二维数组,可以直观的感受到这个函数实现的效果。
二、np.vstack函数语法
np.vstack函数的语法如下:
numpy.vstack(tup: Union[Tuple[numpy.ndarray, ...], numpy.ndarray]) -> numpy.ndarray
其中,
tup:需要进行垂直堆叠的数组序列或一个二维数组。
返回值:返回一个新的垂直堆叠后的数组。
三、np.vstack函数应用案例
1. 使用np.vstack函数增加矩阵的行数
在实际应用中,我们有时候需要增加矩阵的行数。这时候,我们就可以使用np.vstack函数来实现。例如,我们要将一个n行3列的矩阵a平移成m行3列的矩阵b,其中n
import numpy as np a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.vstack((a, np.zeros((m-n,3))))
这里我们将a和一个形状为(m-n,3)、元素全为0的矩阵堆叠在一起,得到一个m行3列的矩阵b。其中,(m-n,3)即为将a的行数延长到m的行数时需要添加的全0行的行数。
2. 使用np.vstack函数拼接图片并保存
在图像处理领域中,我们经常需要将多张图片拼接在一起。这时候,我们可以使用np.vstack函数来实现。例如,我们将两张图片按照垂直方向拼接起来,并保存为新的图片。
import numpy as np import cv2 img1 = cv2.imread('img1.jpg', 1) img2 = cv2.imread('img2.jpg', 1) img_concat = np.vstack((img1, img2)) cv2.imwrite('img_concat.jpg', img_concat)
这里我们先使用cv2.imread函数读取img1和img2两张图片。之后通过np.vstack函数将两张图片拼接在一起得到img_concat,并使用cv2.imwrite函数将拼接后的图片保存成一张新的jpeg格式的图片。
3. 使用np.vstack函数堆叠矩阵并进行PCA分析
在数据处理与分析领域中,使用奇异值分解(SVD)来计算数据中的主成分分析(PCA)是一种常见的方法。其中,矩阵就是SVD基本算法中的重要数据结构之一。因此,我们可以使用np.vstack函数来进行矩阵的堆叠,从而进行主成分分析。
import numpy as np from sklearn.decomposition import PCA X1 = np.array([[2, 3], [7, 2], [8, 5], [3, 8], [5, 9]]) X2 = np.array([[4, 5], [3, 2], [9, 4], [7, 3], [1, 1]]) X = np.vstack((X1, X2)) pca = PCA(n_components=2) pca.fit(X) print(pca.explained_variance_ratio_)
这里我们构造了两个二维矩阵X1和X2。之后使用np.vstack函数堆叠得到新的二维矩阵X,其中的数据就是原来的矩阵堆叠构成的。最后,我们使用sklearn.decomposition模块下的PCA类,对新的矩阵X进行主成分分析,并输出前两个主成分的方差占比。
四、np.vstack函数使用注意事项
1. 需要注意垂直堆叠序列中各元素的维度是否一致。
2. 垂直堆叠所有数组的维数必须相同。
3. 垂直堆叠时,数据类型必须相同,否则将在堆叠时按照较高精度的数据类型来处理。