Python 在z轴上重塑numpy阵列的形状
我有一个这样的数据集Python 在z轴上重塑numpy阵列的形状,python,numpy,Python,Numpy,我有一个这样的数据集 a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 如何将其重塑为(3,2,2),以便a[:,0,0]=[1,2,3]?您可以使用两个步骤: 第一步 使用order='F'意味着使用类似Fortran的索引顺序读/写元素,第一个索引变化最快,最后一个索引变化最慢 setp2 获得最终结果: In [34]: c[:,0,0] Out[34]: array([1, 2, 3]) 由于您希望保持前3个值“在一起”,我们可以从以下形状开始:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
如何将其重塑为(3,2,2)
,以便a[:,0,0]=[1,2,3]
?您可以使用两个步骤:
第一步
使用order='F'
意味着使用类似Fortran的索引顺序读/写元素,第一个索引变化最快,最后一个索引变化最慢
setp2
获得最终结果:
In [34]: c[:,0,0]
Out[34]: array([1, 2, 3])
由于您希望保持前3个值“在一起”,我们可以从以下形状开始:
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
调用)执行相同的操作
所以你的问题有点模棱两可
在另一个答案中提到的以顺序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.reformate(3,4,order='F').reformate(3,2,2)
产生了我的第一个结果Out[33]
。你看过numpy和reformate
函数了吗?可能重复@busybear是的,但我不确定如何做。将该数组整形为(3,2,2)并将其索引为[:,0,0]不会给出[1,2,3]a.reformate(3,2,2,order='F')[:,0,0]
为我返回[1,2,3]
。
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]]])
In [37]: a.reshape(3,2,2, order='F')
Out[37]:
array([[[ 1, 7],
[ 4, 10]],
[[ 2, 8],
[ 5, 11]],
[[ 3, 9],
[ 6, 12]]])