import numpy as np
image1 = np.zeros((120, 120))
image2 = np.zeros((120, 120))
image3 = np.zeros((120, 120))
pack1 = np.array([image1,image2,image3])
pack2 = np.array([image1,image2,image3])
result = np.array([pack1,pack2])
print result.shape
结果是: (2, 3, 120, 120)
问题:如何在不混合的情况下使用相同的数据创建形状为 (2,120,120,3) 的数组?
最佳答案
使用np.rollaxis
将单个轴移动(确定,滚动)到指定位置:
>>> a.shape
(2, 3, 11, 11)
>>> np.rollaxis(a, 0, 4).shape
(3, 11, 11, 2)
这里的语法是“滚动第 0 个轴,使其成为新数组中的第 4 个”。
请注意,rollaxis
创建了一个 View 并且没有复制:
>>> np.rollaxis(a, 0, 4).base is a
True
另一种(通常更易读)的方法是使用 np.transpose
接受轴放置位置的元组这一事实。观察:
>>> np.transpose(a, (1, 2, 3, 0)).shape
(3, 11, 11, 2)
>>> np.transpose(a, (1, 2, 3, 0)).base is a
True
这里的语法是“置换轴,使原始数组中的第 0 轴成为新数组中的第 4 轴”
关于python - 改变 ndarray 的形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41022182/