在numpy中组合稀疏阵列和遮罩阵列

在numpy中组合稀疏阵列和遮罩阵列,numpy,sparse-matrix,Numpy,Sparse Matrix,有没有一种方便的方法可以在稀疏矩阵上使用屏蔽数组 因为在使用scipy稀疏矩阵创建遮罩阵列时,遮罩似乎不起作用 一个典型的应用是邻接矩阵,其中的值可以是{0,1,},用于表示网络中的链接{0,1},而未知/看不见的值{},用于预测。我并不奇怪,试图为屏蔽提供稀疏矩阵是行不通的。少数使用稀疏函数的numpy函数是将任务委托给稀疏代码的函数 也许可以用data属性作为掩码数组来构造coo格式矩阵,但我怀疑这是否有效。未屏蔽的代码通常会忽略屏蔽 掩码数组是一个ndarray子类,它维护两个属性,数据和

有没有一种方便的方法可以在稀疏矩阵上使用屏蔽数组

因为在使用scipy稀疏矩阵创建遮罩阵列时,遮罩似乎不起作用


一个典型的应用是邻接矩阵,其中的值可以是{0,1,},用于表示网络中的链接{0,1},而未知/看不见的值{},用于预测。

我并不奇怪,试图为屏蔽提供稀疏矩阵是行不通的。少数使用稀疏函数的
numpy
函数是将任务委托给稀疏代码的函数

也许可以用
data
属性作为掩码数组来构造
coo
格式矩阵,但我怀疑这是否有效。未屏蔽的代码通常会忽略屏蔽

掩码数组是一个
ndarray
子类,它维护两个属性,数据和掩码,两者都是数组。许多屏蔽方法的工作原理是用合适的值(0表示总和,1表示乘积)填充屏蔽值,并执行规则数组计算

稀疏矩阵不是
ndarray
子类。一种格式实际上是字典子类。大多数将数据存储在3个数组中,即2个坐标和数据。与非稀疏数组的交互通常涉及
todense()
将操作转换为常规
numpy
操作

设计上没有互操作性。如果某件事真的起作用,那可能是因为某种巧合的方法授权

比如说

In [85]: A=sparse.coo_matrix(np.eye(3))
In [86]: M=np.ma.masked_array(np.eye(3))
In [87]: A+M
Out[87]: 
masked_array(data =
 [[ 2.  0.  0.]
 [ 0.  2.  0.]
 [ 0.  0.  2.]],
             mask =
 False,
       fill_value = 1e+20)

In [88]: M+A
NotImplementedError: adding a nonzero scalar to a sparse matrix is not supported
我本以为
M+A
会起作用,但从我的理解来看,它是在一个遮罩上增加稀疏。但有时
x+y
实际上是作为
y来实现的<代码>A+np.eye(3)
在这两种顺序中都起作用。

文档提到某些操作可能有副作用。使用
numpy.ma.filled
如何根据掩码和填充值将掩码数组转换为普通数组?