簡體   English   中英

有效更改numpy數組的順序

[英]Efficiently change order of numpy array

我有一個3維的numpy數組。 尺寸最多可以達到128 x 64 x8192。我要執行的操作是通過成對互換來更改第一維的順序。

到目前為止,我唯一的想法是按照正確的順序創建索引列表。

order    = [1,0,3,2...127,126]
data_new = data[order]

我擔心這不是很有效,但是到目前為止我還沒有更好的主意

您可以重塑形狀以將第一個軸拆分為兩個軸,以使這些后一個軸的長度為2 ,然后使用[::-1]沿該軸翻轉數組,最后將其重塑為原始形狀。

因此,我們將有一個這樣的實現-

a.reshape(-1,2,*a.shape[1:])[:,::-1].reshape(a.shape)

樣品運行-

In [170]: a = np.random.randint(0,9,(6,3))

In [171]: order = [1,0,3,2,5,4]

In [172]: a[order]
Out[172]: 
array([[0, 8, 5],
       [4, 5, 6],
       [0, 0, 2],
       [7, 3, 8],
       [1, 6, 3],
       [2, 4, 4]])

In [173]: a.reshape(-1,2,*a.shape[1:])[:,::-1].reshape(a.shape)
Out[173]: 
array([[0, 8, 5],
       [4, 5, 6],
       [0, 0, 2],
       [7, 3, 8],
       [1, 6, 3],
       [2, 4, 4]])

另外,如果您希望有效地創建那些不斷翻轉的索引order ,我們可以做這樣的事情-

order = np.arange(data.shape[0]).reshape(-1,2)[:,::-1].ravel()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM