簡體   English   中英

重新排列numpy數組中的行條目

[英]Rearranging entries of rows in numpy array

我試圖將numpy數組A轉換為B而不使用循環。

A=np.array([[1,2,3],
            [1,3,0],
            [2,0,0]])

B=np.array([[1,2,3],
            [1,0,3],
            [0,2,0]])

所以在每一行中,我想使用它們的值作為索引對條目重新排序。 (即在第2行, [1,3,0] ,1是第一個條目,3是第三個條目,0將作為第二個條目填入[1,0,3]

我可以為一行做這個,所以我可以遍歷數組,但我想看看有沒有辦法在沒有循環的情況下做到這一點。 我知道循環對像這樣的小數組沒有什么不同,但是我擔心在大型數組(1m,1m)上進行循環會產生瓶頸。

謝謝!

有趣的問題,+ 1。

In [28]:

import numpy as np
A=np.array([[1,2,3],
            [1,3,0],
            [2,0,0]])
In [29]:

B=np.zeros(A.shape, 'int64')+np.arange(1, A.shape[0]+1)
In [30]:

np.where(np.asarray(map(np.in1d, B, A)), B, 0)
Out[30]:
array([[1, 2, 3],
       [1, 0, 3],
       [0, 2, 0]])
In [31]:

%timeit np.where(np.asarray(map(np.in1d, B, A)), B, 0)
10000 loops, best of 3: 156 µs per loop

獲得相同的東西的不同方法。 大型陣列可能會更快:

>>> mask = A != 0
>>> rows, cols = A.shape
>>> idx = (A - 1 + (np.arange(rows)*cols)[:, None])[mask]
>>> B = np.zeros_like(A)
>>> B.ravel()[idx] = A[mask]
>>> B
array([[1, 2, 3],
       [1, 0, 3],
       [0, 2, 0]])

它將A的非零條目轉換為扁平數組中的索引,然后使用這些索引將A的非零條目復制到B的展平視圖中的右側位置。

暫無
暫無

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

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