Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找作为集合成员的numpy数组行_Python_Arrays_Performance_Numpy - Fatal编程技术网

Python 查找作为集合成员的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进行比较 检查所有真实

我想查找作为集合成员的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
    将set
    wanted
    转换为Numpy数组

  • 扩展所需
    的Numpy数组版本的维度
    以形成3D数组,并与引入的
    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]])