我有一个这样的数据集
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
如何将其重塑为(3,2,2)
的形状,以便a[:,0,0] = [1,2,3]
?
答案 0 :(得分:1)
您可以使用两个步骤: 第一步。
In [28]: b1 = np.reshape(a,(3,4), order='F')
In [29]: b1
Out[29]:
array([[ 1, 4, 7, 10],
[ 2, 5, 8, 11],
[ 3, 6, 9, 12]])
use order='F'
表示使用类似Fortran的索引顺序读取/写入元素,第一个索引更改最快,最后一个索引更改最慢。 numpy.reshape
setp2
In [30]: c = b1.reshape(3,2,2)
In [31]: c
Out[31]:
array([[[ 1, 4],
[ 7, 10]],
[[ 2, 5],
[ 8, 11]],
[[ 3, 6],
[ 9, 12]]])
获得最终结果:
In [34]: c[:,0,0]
Out[34]: array([1, 2, 3])
答案 1 :(得分:0)
In [30]: a=np.arange(1,13)
In [31]: a
Out[31]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
由于您希望将“前三个”值保持在一起,因此我们可以从以下调整开始:
In [32]: a.reshape(2,2,3)
Out[32]:
array([[[ 1, 2, 3],
[ 4, 5, 6]],
[[ 7, 8, 9],
[10, 11, 12]]])
然后交换几个轴:
In [33]: a.reshape(2,2,3).transpose(2,0,1)
Out[33]:
array([[[ 1, 4],
[ 7, 10]],
[[ 2, 5],
[ 8, 11]],
[[ 3, 6],
[ 9, 12]]])
In [34]: _[:,0,0]
Out[34]: array([1, 2, 3])
或使用其他移调:
In [35]: a.reshape(2,2,3).transpose(2,1,0)
Out[35]:
array([[[ 1, 7],
[ 4, 10]],
[[ 2, 8],
[ 5, 11]],
[[ 3, 9],
[ 6, 12]]])
transpose()
带有参数(也用.T
调用)做同样的事情。
所以你的问题有点模棱两可。
另一个答案中提到的order F
重塑也是如此:
In [37]: a.reshape(3,2,2, order='F')
Out[37]:
array([[[ 1, 7],
[ 4, 10]],
[[ 2, 8],
[ 5, 11]],
[[ 3, 9],
[ 6, 12]]])
(尽管经过了两步,a.reshape(3,4, order='F').reshape(3,2,2)
产生了我的第一个结果Out[33]
)。