Python 查找作为集合成员的numpy数组行
我想查找作为集合成员的numpy数组的行。例如:Python 查找作为集合成员的numpy数组行,python,arrays,performance,numpy,Python,Arrays,Performance,Numpy,我想查找作为集合成员的numpy数组的行。例如: wanted=set([(1,2)、(8,9)]) z=np.array([[1,2],[8,8],[2,3]]) 结果应该是[1,2] 我可以使用一个列表: [b表示z中的b,如果需要元组(b)] 但是,当z有许多行和列时,这是很慢的。有没有更快的方法 谢谢大家! 一种矢量化方法是- 使用map()和np.vstack将setwanted转换为Numpy数组 扩展所需的Numpy数组版本的维度以形成3D数组,并与引入的z进行比较 检查所有真实
wanted=set([(1,2)、(8,9)])
z=np.array([[1,2],[8,8],[2,3]])
结果应该是[1,2]
我可以使用一个列表:
[b表示z中的b,如果需要元组(b)]
但是,当z有许多行和列时,这是很慢的。有没有更快的方法
谢谢大家! 一种矢量化方法是-
- 使用
和map()
将setnp.vstack
转换为Numpy数组wanted
- 扩展所需
以形成3D数组,并与引入的的Numpy数组版本的维度
进行比较z
- 检查所有真实行和任何真实第一轴匹配,为我们提供一个可用于索引到
以进行最终选择的掩码z
wanted_arr = np.vstack((map(np.array,wanted)))
out = z[((wanted_arr[:,None] == z).all(2)).any(0)]
样本运行-
In [64]: z
Out[64]:
array([[1, 2],
[8, 8],
[2, 3]])
In [65]: wanted
Out[65]: {(1, 2), (8, 9)}
In [66]: wanted_arr = np.vstack((map(np.array,wanted)))
In [67]: wanted_arr
Out[67]:
array([[1, 2],
[8, 9]])
In [68]: z[((wanted_arr[:,None] == z).all(2)).any(0)]
Out[68]: array([[1, 2]])