Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.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中获取满足条件的矩阵的行索引_Python_Matrix Indexing - Fatal编程技术网

在Python中获取满足条件的矩阵的行索引

在Python中获取满足条件的矩阵的行索引,python,matrix-indexing,Python,Matrix Indexing,我一直试图获得矩阵(A)中包含元素nd的所有行索引 A的大小为4M*4,此操作需要约12秒 链接到文件: 有没有更快的方法来实现这一点?我认为更好的方法是使用迭代器而不是列表 idxs = (i for i in xrange(len(A)) if nd in A[i]) idxs.next() 由于您使用的是numpy,因此使用更多的numpy函数可以大大提高速度。您在我的系统上的当前方法: %timeit v=[i for i in range(len(A)) if nd in A[i]]

我一直试图获得矩阵(A)中包含元素nd的所有行索引

A的大小为4M*4,此操作需要约12秒

链接到文件:


有没有更快的方法来实现这一点?

我认为更好的方法是使用迭代器而不是列表

idxs = (i for i in xrange(len(A)) if nd in A[i])
idxs.next()

由于您使用的是
numpy
,因此使用更多的numpy函数可以大大提高速度。您在我的系统上的当前方法:

%timeit v=[i for i in range(len(A)) if nd in A[i]]
1 loop, best of 3: 4.23 s per loop
相反,这要快40倍:

%timeit v = np.where(np.sum((A == nd), axis=1) > 0)
10 loops, best of 3: 92.2 ms per loop

您还可以查看
np.in1d
,它类似于我上面使用的
A==nd
,但可以与列表(类似于A==nd1或nd2或nd3)进行比较。

如果可以,请共享
A
nd
的样本值。这将让我们更清楚地了解您在做什么样的操作,以及哪种解决方案更适合。您好Vivek-我给了示例值一个错误:这不是一个错误,是对生成器的引用。请不要马上给出结果,每次需要一个值时,请使用下一步的方法获取。请您解释一下如何获取数组中的值,很抱歉,我没有意识到这一点。我更新答案以提供一个简单的示例,说明如何使用Generator当我使用我提到的列表时,我将v作为数组,但是如果我使用你在这里提到的生成器,我只得到1个元素,而不是整个数组。有什么解决办法吗?我发现这甚至比v=np花费的时间要少得多。其中(A==nd)[0]不会给出你想要的东西!这将为您提供A==nd的所有元素。但是您想知道哪些行有任意元素==nd。这就是为什么你必须在一个轴上求和。
%timeit v = np.where(np.sum((A == nd), axis=1) > 0)
10 loops, best of 3: 92.2 ms per loop