【发布时间】:2017-12-18 18:22:51
【问题描述】:
我的数据是 3D,但只有第三个轴具有已知维度,我需要将其转换为 2D 数组。
例子:
input =
[[[1, 2, 3]],
[[4, 5, 6],
[7, 8, 9]],
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]]
input_reshaped =
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
所以我有一个 3D 数据,其中第一个和第二个维度在我的数据集中是可变的,第三个维度是恒定的并且是先前已知的。
输入中的每个块也是 numpy 数组。我知道我可以使用 numpy.vstack 并迭代第一维来执行此操作。但如果可能的话,我想以 Python 的方式进行这种重塑,而无需明确地迭代我的数据。
我已经尝试执行列表综合来获取每个块的第一个形状,然后对这些值求和并将其与 reshape 一起使用。像这样:
def myStack(a):
lengths = [item.shape[0] for item in a]
common_dim = a[0].shape[1]
return a.reshape(np.sum(lengths), common_dim)
但是使用前面示例中的输入,我得到以下错误:
ValueError: cannot reshape array of size 3 into shape (6,3)
因为 Python 看到输入有一个形状为 (3,) 的 numy.array
有什么想法吗?
额外:如果可能的话,在上述条件下进行反向转换真的很棒!
【问题讨论】:
-
np.concatenate(inp axis=0)怎么样? -
什么,确切地您正在使用什么?您的示例
input数组不是数组,它是list对象。给我们一个实际数组的例子。请注意,您说您的数组是“3D”,但是如果我在您的input数据上使用数组构造函数,它会返回一个一维数组... -
嗯,我认为您别无选择,只能使用
np.vstack。或np.concatenate在数组列表中。
标签: python arrays numpy reshape