python - 如何将多维数组从一种特定排列 reshape 为另一种排列?

标签 python arrays numpy tensor

我有一个 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.]]])

最佳答案

使用zip匹配相应的行。

试试这个:

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)

输出:

[[[0. 0. 0. 0.]
  [1. 1. 1. 1.]]

 [[0. 0. 0. 0.]
  [1. 1. 1. 1.]]

 [[0. 0. 0. 0.]
  [1. 1. 1. 1.]]]

关于python - 如何将多维数组从一种特定排列 reshape 为另一种排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57281829/

相关文章:

python - 如何在 tkinter 的 ttk.Treeview 中取消选择行

python - Tensorflow:如何修改张量中的值

java - 使用字符串输入中的字符填充二维数组

python - numpy 数组可以在 GPU 中运行吗?

python - 用 numpy 支持覆盖字典

python - 在 Python 中重写实例方法内的函数

python - django: select_related() 在一个已经存在的对象上?

python - 装饰器如何标记一个函数?

C#函数返回数组

python - MatPlotLib explode 最大数组值