簡體   English   中英

從2d numpy數組的每一行中選擇隨機非零元素

[英]Select random non zero elements from each row of a 2d numpy array

我有一個二維數組

a = array([[5, 0, 1, 0],
           [0, 1, 3, 5],
           [2, 3, 0, 0],
           [4, 0, 2, 4],
           [3, 2, 0, 3]])

和一維數組

b = array([1, 2, 1, 2, 2])

其中( b )告訴我們我們要從數組a每一行中選擇多少個非零元素。

例如, b[0] = 1告訴我們必須從a[0]選擇1個非零元素, b[1] = 2告訴我們必須從a[1]選擇2個非零元素, 等等。

對於一np.random.choice數組,可以使用np.random.choice來完成,但是我找不到二維數組的處理方法,因此必須使用for循環來減慢計算速度。

我希望結果作為2d數組作為

array([[5, 0, 0, 0],
       [0, 1, 0, 5],
       [2, 0, 0, 0],
       [0, 0, 2, 4],
       [3, 2, 0, 0]])

在這里,我們在第1行有1個元素,在第2行有2個元素,在第3行有1個元素,依此類推,如數組b所示。

它看起來像一個競爭性編程問題。

我不認為您可以使用numpy.random.choice獲得結果(我可能錯了)。

無論如何,要這樣想。 為了從大小為n一維數組中選擇x個非零元素,在最壞的情況下,它的復雜度為O(n)。 而且,對於2D數組,如果遵循相同的幼稚方法,則將為O(n ^ 2)。

這篇文章幾乎與您的問題類似,但是numpy.nonzero也是O(n ^ 2)函數。

暫無
暫無

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

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