You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Eigen稠密矩阵中满足条件的行列索引?

从稠密矩阵提取满足条件的稀疏索引

嘿,这个需求太常见啦!从稠密矩阵里快速揪出满足特定条件的行/列索引,其实不用绕布尔矩阵转稀疏再删值的弯路,用合适的工具能一步到位,效率还高。我拿你给的例子来一步步演示:

方法一:用NumPy高效实现(推荐)

如果你用的是NumPy矩阵(这也是处理数值矩阵的常规选择),np.where()函数就是专门干这个的——直接返回所有满足条件的元素的行、列索引:

import numpy as np

# 你的示例稠密矩阵
dense_mat = np.array([[1,5,2],[7,6,3],[2,3,8]])

# 找出所有值大于4的元素的行、列索引
rows, cols = np.where(dense_mat > 4)

# 转换成你要的(行,列)元组列表
target_indices = list(zip(rows, cols))
print(target_indices)  # 输出:[(0, 1), (1, 0), (1, 1), (2, 2)]

补充:如果需要构建稀疏矩阵

要是你后续需要把这些索引转换成稀疏矩阵,也可以直接用这些结果,不用先搞布尔矩阵:

from scipy.sparse import coo_matrix

# 构建值全为1的稀疏矩阵(和你示例里的布尔转稀疏结果一致)
sparse_mat = coo_matrix((np.ones_like(rows), (rows, cols)), shape=dense_mat.shape)

# 要是之后还需要提取索引,直接取 sparse_mat.row 和 sparse_mat.col 就行

方法二:纯Python列表实现(无依赖)

如果你的矩阵是纯Python嵌套列表,用列表推导式也能轻松搞定:

dense_mat = [[1,5,2],[7,6,3],[2,3,8]]

# 遍历每行每列,筛选出值大于4的索引
target_indices = [(i, j) for i, row in enumerate(dense_mat) for j, val in enumerate(row) if val > 4]
print(target_indices)  # 同样得到:[(0, 1), (1, 0), (1, 1), (2, 2)]

对比你原来的思路,这两种方法都省掉了中间构建布尔矩阵、转稀疏再删除值的步骤,尤其是处理大矩阵时,内存占用和计算效率都会好很多~

内容的提问来源于stack exchange,提问作者Aerys.L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:27:20