reshape
使用数组的reshape方法,可以创建一个改变了尺寸的新数组,原数组的shape保持不变;
import numpy as np
a = np.arange(16)
print(a) # 输出[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
arr = a.reshape((2,2,4))
print(arr)
输出:
[[[ 0 1 2 3]
[ 4 5 6 7]]
[[ 8 9 10 11]
[12 13 14 15]]]
transpose
可以创建一个改变了维度的新数组,原数组不变
arr1 = arr.transpose(2,1,0)
print(arr1)
输出:
[[[ 0 8]
[ 4 12]]
[[ 1 9]
[ 5 13]]
[[ 2 10]
[ 6 14]]
[[ 3 11]
[ 7 15]]]
原先arr的有3个维度(0,1,2),每个数字都对应着每一个维度上的索引值,如arr[1,0,3]对应的值是11,也就是11的第0维度的索引值是1,第1维度索引是0,第2维度索引是3.
arr1=arr.transpose(2,1,0)的意思是,将arr的第2维换到第0维,第0维度换到第2维度去,第1维不变,并赋值给arr1。因此,arr1中11这个值所在的索引值就由[1,0,3]变换为[3,0,1],7的索引值就由[0,1,3]变为[3,1,0]。因此arr的shape是(2,2,4), arr1的shape变为了(4,2,2)
transpose变换的是维度,对应维度的索引值跟着维度变换。
swapaxes
可以创建一个改变了维度的新数组,原数组不变
arr2 = arr.swapaxes(2,1)
print(arr2)
输出:
[[[ 0 4]
[ 1 5]
[ 2 6]
[ 3 7]]
[[ 8 12]
[ 9 13]
[10 14]
[11 15]]]
同理,swapaxes()函数接收的是一对轴编号,也就是一对维度,将这两个维度互相交换位置。每个数值的索引值跟着维度变换位置。如arr2中的11的索引值为[1,0,3]变换为[1,3,0],7的索引值由[0,1,3]变为[0,3,1]
arr2的shape变为了(2,4,2)