python - 具有稀疏矩阵的 bool 索引 Numpy 数组

标签 python numpy matrix scipy sparse-matrix

我正在尝试通过稀疏矩阵在 numpy 数组上应用 bool 索引。

A = dense n x n matrix, where n is large

B = sparse n x n Boolean matrix

操作示例:

A[B] *= 2

A[~B] *= -2

是否有一种有效的方法可以实现这一目标,而无需将稀疏矩阵转换为密集矩阵(这会导致内存问题)?

最佳答案

您可以通过将稀疏矩阵中的非零(即 True)值转换为 COO 格式来访问与非零(即 True)值关联的行和列索引:

B = B.tocoo()

然后

A[B.row, B.col] *= 2

避免将 B 转换为密集矩阵。


如果 B 是稀疏的,那么 ~B 就相当密集。 为了有效地处理 A[~B] *= -2,我们应该尽量避免直接计算 ~B。 相反,我们可以在任何地方乘以 -2:

A *= -2

然后修复 B 为 True 的位置:

A[B.row, B.col] *= -1/2   

关于python - 具有稀疏矩阵的 bool 索引 Numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48228736/

相关文章:

python - 将 C++ 数组传递给 python

c - 将二维数组提升为 C 的幂

python - scikit-learn 只允许使用线性 svms 访问 clf.coef_ 是有原因的吗?

python - 为什么函数参数之外的 "self"会出现 "not defined"错误?

python-plotly 相对于区域设置的日期格式

python - 使用 numpy 求解一个未知数的线性系统?

python - numpy dtype 错误 - (结构化数组创建)

python - 运行 celery 任务时如何取消确认消息?

c - 将 C 语言中以逗号分隔的文件的矩阵输入转换为 2D

python - 如何在Python中将pandas数据框转换为矩阵格式?