代码之家  ›  专栏  ›  技术社区  ›  duhaime

numpy:多次重塑使对象不相等

  •  0
  • duhaime  · 技术社区  · 6 年前

    我试图在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 ,我似乎无法重塑决赛 变成 X :

    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, :].reshape(1, X.shape[0] * X.shape[2])
        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])) # fails
    

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

    有人知道我如何在维护第二个片段的一般结构的同时使第二个断言成功吗?任何建议都会很有帮助的!

    1 回复  |  直到 6 年前
        1
  •  1
  •   Julien    6 年前

    正如你所说,可能有更好的方法,但如果你绝对想坚持你的结构,你只需要重新调整你的指数:

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