我有一个before_arr
(2 x 3 x 4)多维数组。我想将其转换为具有以下特定排列方式的new_arr
(3 x 2 x 4)。
import numpy as np
before_arr = np.array([
[
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
],
[
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
],
], dtype=float)
# what I want
new_arr = np.array([
[
[0, 0, 0, 0],
[1, 1, 1, 1],
],
[
[0, 0, 0, 0],
[1, 1, 1, 1],
],
[
[0, 0, 0, 0],
[1, 1, 1, 1],
],
], dtype=float)
before_arr.reshape(3, 2, 4)
没有给我我想要的东西。
In [74]: before_arr.reshape(3, 2, 4)
Out[74]:
array([[[0., 0., 0., 0.],
[0., 0., 0., 0.]],
[[0., 0., 0., 0.],
[1., 1., 1., 1.]],
[[1., 1., 1., 1.],
[1., 1., 1., 1.]]])
答案 0 :(得分:2)
使用zip
来匹配相应的行。
尝试一下:
{ messageType: 'error', message: undefined }
输出:
import numpy as np
before_arr = np.array([
[
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
],
[
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
],
], dtype=float)
new_arr = np.array([*zip(*before_arr)])
print(new_arr)
答案 1 :(得分:1)
由于只需要交换两个轴的位置,因此可以使用np.swapaxes
。这可能是获得所需输出的最直接方法。
before_arr.swapaxes(0, 1)
array([[[0., 0., 0., 0.],
[1., 1., 1., 1.]],
[[0., 0., 0., 0.],
[1., 1., 1., 1.]],
[[0., 0., 0., 0.],
[1., 1., 1., 1.]]])
从更一般的意义上讲,您可以使用transpose
显式定义所需输出的轴顺序,如果您需要移动多个轴(尽管此处并非严格要求),则这将是有益的。
before_arr.transpose(1, 0, 2)