【发布时间】:2019-05-01 19:25:04
【问题描述】:
我正在处理一个子程序,我需要处理矩阵的每一行并找出当前行中包含的其他行。为了说明一行包含另一行时,请考虑如下 3x3 矩阵:
[[1, 0, 1],
[0, 1, 0],
[1, 0, 0]]
这里第 1 行包含第 3 行,因为第 1 行中的每个元素都大于或等于第 3 行,但第 1 行不包含第 2 行。
我想出了以下解决方案,但由于 for 循环(矩阵大小约为 6000x6000),它非常慢。
for i in range(no_of_rows):
# Here Adj is the 2D matrix
contains = np.argwhere(np.all(Adj[i] >= Adj, axis = 1))
能否让我知道是否可以更有效地做到这一点?
【问题讨论】:
-
尝试以
np.triu_indices开头并检查此stackoverflow.com/questions/52690963/… -
您想识别每个元素都包含自己吗?此外,您已将其标记为
broadcasting。你可以试试(a >= a[:, None]).all(-1),但这会很快用大数组炸毁你的内存 -
@kvitaliy 谢谢!我已经看过那个帖子了。在我的例子中,triu_indices 会产生非常大(25715206 大小)的 R 和 C 向量,并且需要很长时间。
-
@user3483203 谢谢! “包含”一词意味着将每一行与其他每一行元素进行比较。
-
是的,所以根据定义,第一行包含第一行。你想要这些吗?
标签: python numpy vectorization numpy-ndarray array-broadcasting