numpy库reshape用法详解

numpy库reshape用法详解

1. reshape的定义

在numpy库中,reshape函数可以将原来的数组改变为指定的形状,并返回新的数组。reshape函数的语法格式如下:

numpy.reshape(array, newshape, order='C')

其中,array表示要进行形状改变的数组;newshape表示新的形状;order表示数组在内存中的存放顺序,有两个选项:C表示按行存放,F表示按列存放。如果不指定order,则默认为C。

2. reshape的基本用法

下面我们看一个简单的例子:

import numpy as np

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

print(arr1)

arr2 = np.reshape(arr1, (3,2))

print(arr2)

输出结果如下:

[[1 2 3]

[4 5 6]]

[[1 2]

[3 4]

[5 6]]

在这个例子中,我们先定义了一个二维数组arr1,它包含两行三列。然后使用reshape函数将arr1改变成一个新的二维数组arr2,它包含三行两列。

2.1 reshape后数组元素的顺序

我们还可以使用order参数来控制数组元素在内存中的存放顺序。默认情况下,reshape函数将数组按行展开,并将展开后的一维数组用新的形状重新组合成多维数组。下面看一个例子:

import numpy as np

arr1 = np.arange(6)

print(arr1)

arr2 = np.reshape(arr1, (2,3), order='F')

print(arr2)

输出结果如下:

[0 1 2 3 4 5]

[[0 2 4]

[1 3 5]]

在这个例子中,我们首先使用arange函数创建了一个一位数组arr1,它包含0~5这6个整数。然后使用reshape函数将arr1变成一个新的二维数组arr2,由于我们指定了order='F',reshape函数会按列展开原来的一维数组,并按列填充成多个一维数组,最终组合成一个二维数组。

3. reshape的高级用法

除了基本用法以外,reshape还有一些高级用法,可以实现更加复杂的操作。

3.1 在reshape中使用-1

在reshape函数中,可以使用-1来表示让numpy自动计算数组的某个维度的大小。下面看一个例子:

import numpy as np

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

print(arr1)

arr2 = np.reshape(arr1, (-1,))

print(arr2)

输出结果如下:

[[1 2 3]

[4 5 6]]

[1 2 3 4 5 6]

在这个例子中,我们将二维数组arr1变为了一维数组arr2,不同的是,我们在reshape函数中使用了一个-1作为newshape参数的值。此时numpy会自动计算newshape的大小,我们只需要确定要改变的维度即可。

3.2 将数组降为一维

有时候,我们需要将一个n维数组降为一维数组。可以在reshape中使用-1来实现。下面看一个例子:

import numpy as np

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

print(arr1)

arr2 = np.reshape(arr1, (-1,))

print(arr2)

输出结果如下:

[[[1 2]

[3 4]]

[[5 6]

[7 8]]]

[1 2 3 4 5 6 7 8]

在这个例子中,我们定义了一个三维数组arr1,然后使用reshape将它变为了一个一维数组。注意,使用-1来表示所有的元素都要留下,这个技巧可以在降维时使用。

3.3 将数组重塑为二维数组

有时候,我们需要将一个大的n维数组按照某种规律重塑成一个小的二维数组。可以通过reshape和transpose函数来实现。下面看一个例子:

import numpy as np

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

print(arr1.shape)

arr2 = np.transpose(arr1, (1,0,2))

print(arr2.shape)

arr3 = np.reshape(arr2, (6,-1))

print(arr3)

输出结果如下:

(2, 2, 3)

(2, 2, 3)

[[ 1 2 3 7 8 9]

[ 4 5 6 10 11 12]]

在这个例子中,我们定义了一个三维数组arr1,它的形状为(2, 2, 3),即有2个2*3的二维数组。然后,我们使用transpose函数将arr1的第一维和第二维交换,得到一个新的三维数组arr2,它的形状为(2, 2, 3)。最后使用reshape将arr2变为一个二维数组arr3,它的形状为(6, 2)。在这个例子中,我们将一个二维数组改为另外一个二维数组的过程中,通过transpose函数改变数组的维度和reshape函数改变数组的形状,实现了将大数组重塑为小数组的目的。

4. 总结

numpy库中的reshape函数是一个非常有用的函数,它可以实现数组形状的改变,并返回新的数组。在使用reshape函数时,要注意指定新数组的形状和存储顺序,可以使用-1来让numpy自动计算数组的大小。在实际应用中,还可以使用reshape函数将大的n维数组转换为小的二维数组,并通过transpose函数改变数组的维度,使得原来大数组重塑为小数组。

后端开发标签