脾气暴躁:多次重塑使对象不相等

时间:2018-10-21 22:43:50

标签: python arrays numpy

我正在尝试在numpy中运行一些重塑操作,但似乎无法完成看起来很简单的事情。

以下工作正常:

import numpy as np

X = np.random.rand(55, 100, 3)

b = None
for i in range(X.shape[1]):
    r = X[:, i:i+1, :]
    b = r if not np.any(b) else np.concatenate((b, r), axis=1)

assert np.all(X == b.reshape(X.shape[0], X.shape[1], X.shape[2])) # succeeds

但是,当我尝试重塑r并将其添加到b中的行中时,我似乎无法将最终的b重塑为{{1} }:

X

我知道有更好的方法来完成这种操作。我正在简化一个更复杂的情况。

有人知道我如何在保持第二个代码段的总体结构的同时使第二个断言成功吗?任何建议都将非常有帮助!

1 个答案:

答案 0 :(得分:1)

正如您所说,可能有更好的方法可以做到这一点,但是如果您绝对想坚持自己的结构,则只需要重新整理索引即可:

assert np.all(X == np.transpose(b.reshape(X.shape[1], X.shape[0], X.shape[2]), axes=(1,0,2)))