![](/img/trans.png)
[英]Populate rows of empty matrix from another matrix by index array in 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.