[英]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.