我有一個 2 numpy 陣列,如下所示
a = np.random.rand(30,6,5,4)
b = np.random.rand(6,5,4,3)
我想以一種具有 shape 的方式來組合這些陣列(33, 6, 5, 4)。我可以通過迭代 b 陣列的第 4 維并一一連接來做到這一點,但它似乎效率不高。是否有可能以更“Python”的方式做到這一點?
uj5u.com熱心網友回復:
您始終可以展平任何兩個陣列,連接,然后重新調整為您想要的尺寸。通常,陣列的形狀對用于保存陣列的記憶體沒有任何影響。形狀只是指定 python 如何訪問這些值。
因此.flatten()是零成本函式并且不會移動任何記憶體值。相當于只設定形狀值:
A = np.array([[1,2],[3,4]])
A.shape = (4,)
如果扁平陣列中的值不是您想要的順序,您可能需要運行 transpose 以將值移動到您想要的順序。
uj5u.com熱心網友回復:
In [390]: a = np.random.rand(30,6,5,4)
...: b = np.random.rand(6,5,4,3)
使用轉置b進入兼容的形狀:
In [392]: b1=np.transpose(b,(3,0,1,2))
In [393]: b1.shape
Out[393]: (3, 6, 5, 4)
In [394]: c = np.concatenate((a,b1),axis=0)
In [395]: c.shape
Out[395]: (33, 6, 5, 4)
您沒有提供有關迭代方法的詳細資訊,但這只是對我有意義的一種:
In [398]: alist = [a]
...: for i in range(3):
...: alist.append(b[None,...,i])
...:
In [399]: np.concatenate(alist, 0).shape
Out[399]: (33, 6, 5, 4)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/394799.html
