这里有一个简单的例子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 回答
噜噜哒
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])
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 索引)。
添加回答
举报
0/150
提交
取消