是否有一种方便的方法可以在稀疏矩阵上使用掩码数组?
因为在使用scipy稀疏矩阵创建掩码数组时,看起来掩码不起作用...
一个典型的应用程序是一个邻接矩阵,其中值可以是{0,1,?},用于表示网络中的链接{0,1}和未知/看不见的值{?}来预测。
答案 0 :(得分:1)
我并不感到惊讶,试图给出一个稀疏矩阵来掩盖不起作用。使用稀疏函数的少数numpy
函数是将任务委托给稀疏代码的函数。
有可能构造一个coo
格式矩阵,其中data
属性是一个蒙面数组,但我怀疑这是否存在。通常不会masked
识别的代码会忽略掩码。
掩码数组是ndarray
子类,它维护两个属性,即数据和掩码,两者都是数组。许多蒙版方法的工作方法是使用适当的值(0为sums,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.__add__(x)
。 A+np.eye(3)
适用于两个订单。