我有一個數組是這樣的:NumPy的/大熊貓:轉換的「臺階」數組布爾面具
arr = np.array([4, 6, 3, 9, 2, 100, 3, 1, 1, 1, 1])
我想將它轉換爲布爾數組是這樣的:
[ T, F, F, F, T, F, T, F, F, T, T]
# 4, 6, 3, 9, 2, 100, 3, 1, 1, 1, 1
我可以用這樣一個循環做到這一點:
mask = np.zeros(len(arr), dtype=bool)
ii = 0
while ii < len(arr):
mask[ii] = True
ii += arr[ii]
這有點間接索引方案,其中輸入中的每個元素告訴我們有多少後續元素無效。
如何在不使用Python循環的情況下做到這一點,以便輸入數組很大時它會很快?我也很樂意使用熊貓。
如果我理解正確,這已經很有效率(跳到下一個索引並改變),我無法想象矢量操作會改善這個...我也懷疑'numpy','Pandas'或'scipy'對此有一個內在的東西,但是一個簡單的選擇是用c/C++編寫,用'ctypes'包裝並將'numpy'數組傳遞給你的函數。 –
@EdSmith:循環代碼效率不高,原因很簡單,它使用Python解釋器遍歷值。如果你有很多數據,這可能需要很長時間。 –
我的意思是算法上,如果這是用低級語言編寫的話,那麼在當前形式下它是最優的(似乎是不可矢量化的)?在這種情況下,問題是重新使用一些'numpy' /'pandas'例程比python解釋器開銷更快。 –