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

Obtaining row indices of a matrix that satisfies a condition in Python

我一直在尝试获取包含元素 nd 的矩阵 (A) 的所有行索引。

A的大小是4M*4,这个操作需要~12秒。

Link 到文件:data

# Download the file named elementconnectivity before running this small script 


A=np.loadtxt('elementconnectivity') 
A=A.astype(int)
nd=1103
v=[i for i in range(len(A)) if nd in A[i]]

有没有更快的方法来完成这个?

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

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)。