Numpy:如何在numpy中改变数组形状

Numpy:如何在numpy中改变数组形状

在本文中,我们将介绍如何在numpy中改变数组的形状。

在操作数组时,经常需要改变它们的形状以满足不同的需求。Numpy提供了许多函数来改变数组形状,让我们一一来学习。

阅读更多:Numpy 教程

reshape()函数

reshape()函数是最常用的改变数组形状的方法。它允许我们将数组重新组织为新的形状,但前提是新的形状与原形状的元素个数相同。

例如,我们有一个shape为(2,5)的数组a:

a = np.array([[1,2,3,4,5], [6,7,8,9,10]])

现在我们想将其改变为shape为(5,2):

b = a.reshape(5,2)

这样我们就得到了一个新的形状,其中每个元素的位置都是相同的,但它们的排列方式已经改变了。

如果我们不确定应该使用哪个维度的大小来进行reshape,我们可以使用-1代替我们不知道的维度。例如:

c = a.reshape(-1,10)

这将把a重新组织为shape为(1,10)的数组,因为10是我们已知的维度,而-1是我们不知道的维度。

resize()函数

resize()函数类似于reshape(),但与reshape()函数不同的是,它可以更改数组的形状,并且可以增加或减少元素的数量。当我们更改数组形状时,resize()会填充额外的空间,因此如果输入数组比输出数组的元素个数多,就会有一些元素的值重复出现。

例如,我们有一个shape为(2,5)的数组a:

a = np.array([[1,2,3,4,5], [6,7,8,9,10]])

我们可以使用resize()函数将其重新调整为shape为(5,5)的数组:

b = np.resize(a, (5, 5))

我们也可以将其调整为shape为(3,3)的数组:

c = np.resize(a, (3, 3))

这将通过重复和截断数组的元素来增加或减少其元素的数量。

ravel()和flatten()函数

ravel()和flatten()都可以将一个多维数组展平为一维数组。两者的区别在于它们创建的新数组与原始数组的内存布局不同。

ravel()函数将多维数组变成一维数组,但新数组与原始数组共享内存:

a = np.array([[1,2,3], [4,5,6]])
b = np.ravel(a)

这将产生一个新数组b,其中包含a的所有元素,但b与a共享内存。

flatten()函数创建一个新的一维数组,新数组在内存中和原始数组没有关系:

a = np.array([[1,2,3], [4,5,6]])
b = np.flatten(a)

这将产生一个新的一维数组b,其中包含a的所有元素,但b和a不共享内存。

transpose()函数

transpose()函数可以将数组的维度进行转置。例如,如果我们有一个shape为(2,3)的数组a:

a = np.array([[1,2,3], [4,5,6]])

我们可以使用transpose()将其转置为shape为(3,2)的数组:

b = np.transpose(a)

其中b的第一列由a的第一行组成,第二列由a的第二行组成。

swapaxes()函数

swapaxes()函数可以交换数组的两个轴。

例如,我们有一个shape为(2,3,4)的数组a:

a =np.arange(24).reshape(2,3,4)

我们可以使用swapaxes()将其第一维和第二维进行互换:

b = np.swapaxes(a, 0, 1)

这将产生一个新数组b,其中a的第一维和第二维被交换了。

reshape vs resize

虽然reshape()和resize()函数都可以改变数组的形状,但它们之间还是有很大的区别的。

resize()函数可以增加或减少数组的元素数量,并且在填充额外的空间时可能会重复某些元素的值。而reshape()函数只能重塑数组的形状,而不能改变元素数量。

更进一步地说,如果我们使用resize()函数将一个数组扩展到比原始数组大,那么我们得到的是一个新数组,它比原始数组多出一些元素,而重复的元素可能会影响计算的结果。然而,如果我们使用reshape()函数来执行相同的任务,那么我们提供的新形状必须与原形状中的元素数量匹配,否则会产生一个错误。

总结

在numpy中改变数组的形状是很常见的操作。reshape()函数让我们可以重新组织数组的形状,resize()函数则可以改变数组的形状并增加或减少元素数量,ravel()和flatten()函数可以将数组展平为一维数组,transpose()函数可以改变数组的维度和轴的顺序,而swapaxes()函数可以交换数组的两个轴。了解这些函数的功能将帮助我们更好地进行数据操作和数据分析。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程