Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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
行包含在numpy中_Numpy - Fatal编程技术网

行包含在numpy中

行包含在numpy中,numpy,Numpy,我想知道在python numpy中检查行包含的最佳方法是什么 假设我们有一个向量V=[1,2,3,4],矩阵M=[[2,3,4],[3,5,6],[4,1,3],[5,4,2]]M中的行数等于V的长度。在执行行包含之后,我应该得到False,False,True,True,因为1不在[2,3,4]中,2不在[3,5,6]中,3在[4,1,3]中,4在[5,4,2]中 在python numpy中执行此操作的最佳方法是什么 实际上,我不想使用for循环。这显然是可行的,但不是最好的方法。我自己想

我想知道在python numpy中检查行包含的最佳方法是什么

假设我们有一个向量V=[1,2,3,4],矩阵M=[[2,3,4],[3,5,6],[4,1,3],[5,4,2]]M中的行数等于V的长度。在执行行包含之后,我应该得到False,False,True,True,因为1不在[2,3,4]中,2不在[3,5,6]中,3在[4,1,3]中,4在[5,4,2]中

在python numpy中执行此操作的最佳方法是什么


实际上,我不想使用for循环。这显然是可行的,但不是最好的方法。我自己想出了一个想法,做一个减法,然后计算结果中的零的数量,这比使用for循环要快得多。但是,我想知道是否有更好的方法。您要查找的是in运算符。e、 [1,2,3]中的g.1返回True 因此,将v和m的值设为numpy数组,如下所示:

import numpy as np
v = np.array([1,2,3,4])
m = np.array([np.array([2,3,4]), np.array([3,5,6]), np.array([4,1,3]), np.array([5,4,2])])    
# Checking row wise contain
result = [(v[i] in m[i]) for i in range(len(v))]
结果是:

>>> [(v[i] in m[i]) for i in range(len(v))]
[False, False, True, True]
Divakar指出的另一个解决方案是使用

>>> (m==v[:,None]).any(1)
array([False, False,  True,  True], dtype=bool)
但是,进行一些粗略的定时检查:

>>> start_time=time.time(); (m==v[:,None]).any(1); print(time.time()-start_time)
array([False, False,  True,  True], dtype=bool)
0.000586032867432
>>> start_time=time.time(); [(v[i] in m[i]) for i in range(len(v))]; print(time.time()-start_time)
[False, False, True, True]
7.20024108887e-05

初始解决方案似乎更快。

我尝试了numpy.isin,但它不起作用,因为它检查第一个数组的所有元素。为什么M[0]中的V[0]不起作用?显然,我可以使用for循环。我想要一个快速的答案,我的意思是在数组的向量化操作中执行:M==V[:,None].any1。