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函数改变数组的维度,使得原来大数组重塑为小数组。