如何重塑 numpy 数组以将行变成列
How to reshape numpy arrays to turn rows into columns
假设我有以下形状为 3x3x2 的 numpy 数组:
import numpy as np
X,Y = np.arange(3),np.arange(3)
xy = np.array([[(x, y) for x in X] for y in Y])
上面的数组 xy
由以下给出:
[[[0 0]
[1 0]
[2 0]]
[[0 1]
[1 1]
[2 1]]
[[0 2]
[1 2]
[2 2]]]
我如何将上面的数组重塑为以下数组
xy_reshaped =
[[0 1 2 0 1 2 0 1 2],
[0 0 0 1 1 1 2 2 2]]
我想我正在尝试将以前的数组行转换为新的数组列。但是我也丢失了一个轴,因为新数组的形状是 xy_reshaped.shape = (2,9)
(没有像原始数组中那样的第 3 个轴)。
np.reshape
只能设置为按行和按列读取元素,这两种排序都不适用于上述情况。
是否有一个简单的解决方案来进行重塑?
进行明显的重塑:
In [304]: xy.reshape(9,2)
Out[304]:
array([[0, 0],
[1, 0],
[2, 0],
[0, 1],
[1, 1],
[2, 1],
[0, 2],
[1, 2],
[2, 2]])
现在只需转置:
In [305]: xy.reshape(9,2).transpose()
Out[305]:
array([[0, 1, 2, 0, 1, 2, 0, 1, 2],
[0, 0, 0, 1, 1, 1, 2, 2, 2]])
还有其他方法可以做到这一点,但这是最明显和最容易理解的。
假设我有以下形状为 3x3x2 的 numpy 数组:
import numpy as np
X,Y = np.arange(3),np.arange(3)
xy = np.array([[(x, y) for x in X] for y in Y])
上面的数组 xy
由以下给出:
[[[0 0]
[1 0]
[2 0]]
[[0 1]
[1 1]
[2 1]]
[[0 2]
[1 2]
[2 2]]]
我如何将上面的数组重塑为以下数组
xy_reshaped =
[[0 1 2 0 1 2 0 1 2],
[0 0 0 1 1 1 2 2 2]]
我想我正在尝试将以前的数组行转换为新的数组列。但是我也丢失了一个轴,因为新数组的形状是 xy_reshaped.shape = (2,9)
(没有像原始数组中那样的第 3 个轴)。
np.reshape
只能设置为按行和按列读取元素,这两种排序都不适用于上述情况。
是否有一个简单的解决方案来进行重塑?
进行明显的重塑:
In [304]: xy.reshape(9,2)
Out[304]:
array([[0, 0],
[1, 0],
[2, 0],
[0, 1],
[1, 1],
[2, 1],
[0, 2],
[1, 2],
[2, 2]])
现在只需转置:
In [305]: xy.reshape(9,2).transpose()
Out[305]:
array([[0, 1, 2, 0, 1, 2, 0, 1, 2],
[0, 0, 0, 1, 1, 1, 2, 2, 2]])
还有其他方法可以做到这一点,但这是最明显和最容易理解的。