簡體   English   中英

從數組值動態填充numpy矩陣?

[英]Populate numpy matrix dynamically from array values?

我正在嘗試根據數組的值用numpy動態構造一個二維矩陣,如下所示:

In [113]: A = np.zeros((5,5),dtype=bool)
In [114]: A
Out[114]: array([[False, False, False, False, False],
   [False, False, False, False, False],
   [False, False, False, False, False],
   [False, False, False, False, False],
   [False, False, False, False, False]], dtype=bool)

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

 In [117]: B
 Out[117]: array([0, 1, 3, 0, 2])

現在,我想使用B的值將每行的前n個值分配給A到True。 對於此A和B,正確的輸出將是:

In [118]: A
Out[118]: array([[False, False, False, False, False],
   [ True, False, False, False, False],
   [ True,  True,  True, False, False],
   [False, False, False, False, False],
   [ True,  True, False, False, False]], dtype=bool)

B的長度將始終等於A的行數,並且B的值將始終小於或等於A的列數。A的大小和B的值一直在變化,所以我需要即時構建這些。

我確定這在numpy中有一個簡單的(-ish)解決方案,但是我花了最后一個小時將我的頭撞到重復,平鋪以及其他我能想到的變化上。 在我給自己造成腦震盪之前,有人可以幫我嗎? :)

編輯:我將需要做很多,所以速度將是一個問題。 我現在能想到的唯一版本是:

np.vstack([ [True]*x + [False]*(500-x) for x in B ])

但我希望由於for循環的緣故,它會變慢(如果有什么可比較的話,我會計時)。

怎么樣:

>>> A = np.zeros((5, 7),dtype=bool)
>>> B = np.array([0,1,3,0,2])
>>> (np.arange(len(A[0])) < B[:,None])
array([[False, False, False, False, False, False, False],
       [ True, False, False, False, False, False, False],
       [ True,  True,  True, False, False, False, False],
       [False, False, False, False, False, False, False],
       [ True,  True, False, False, False, False, False]], dtype=bool)

(我從(5,5)更改了形狀,因為我對哪個軸是哪個感到困惑,並且我想確保使用的軸正確。)

[從(np.arange(len(A[0]))[:,None] < B).T簡化為-如果我們擴展B而不是A ,則不需要轉置。]

暫無
暫無

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

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