亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在numpy中通過另一個數組過濾數組元素

在numpy中通過另一個數組過濾數組元素

慕村9548890 2021-09-25 20:59:21
這里有一個簡單的例子import numpy as npx=np.random.rand(5,5)k,p = np.where(x>0.5)k 和 p 是索引數組現在我有一個應該被視為 m=[0,2,4] 的行列表,所以我需要找到列表 m 中 k 的所有條目。我想出了一個非常簡單但效率低下的可怕解決方案d = np.array([ (a,b) for a,b in zip(k,p) if a in m])該解決方案有效,但速度很慢。我正在尋找一種更好、更有效的方法。我需要使用動態調整的 m 進行數百萬次這樣的操作,因此算法的效率確實是一個關鍵問題。
查看完整描述

3 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

也許下面更快:


d=np.dstack((k,p))[0]

print(d[np.isin(d[:,0],m)])



查看完整回答
反對 回復 2021-09-25
?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

您可以使用isin()獲取可用于索引的布爾掩碼k。


>>> x=np.random.rand(3,3)

>>> x

array([[0.74043564, 0.48328081, 0.82396324],

       [0.40693944, 0.24951958, 0.18043229],

       [0.46623863, 0.53559775, 0.98956277]])

>>> k, p = np.where(x > 0.5)

>>> p

array([0, 2, 1, 2])

>>> k

array([0, 0, 2, 2])

>>> m

array([0, 1])  

>>> np.isin(k, m)

array([ True,  True, False, False])

>>> k[np.isin(k, m)]

array([0, 0])


查看完整回答
反對 回復 2021-09-25
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

怎么樣:


import numpy as np

m = np.array([0, 2, 4])

k, p = np.where(x[m, :] > 0.5)

k = m[k]

print(zip(k, p))

這只考慮有趣的行(然后將它們壓縮到 2d 索引)。


查看完整回答
反對 回復 2021-09-25
  • 3 回答
  • 0 關注
  • 305 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號