python - 将 numpy 数组添加到 scipy.sparse.dok_matrix

标签 python numpy scipy sparse-matrix

我有一个 scipy.sparse.dok_matrix(尺寸为 m x n),想要添加一个长度为 m 的平面 numpy 数组。

for col in xrange(n):
    dense_array = ...
    dok_matrix[:,col] = dense_array

但是,此代码在尝试删除不存在的键 (del self[(i,j)]) 时在 dok_matrix.__setitem__ 中引发异常。

所以,现在我正在以不优雅的方式进行此操作:

for col in xrange(n):
    dense_array = ...
    for row in dense_array.nonzero():
        dok_matrix[row, col] = dense_array[row]

感觉非常低效。 那么,最有效的方法是什么?

谢谢!

最佳答案

令我惊讶的是,您这种不优雅的方式并没有出现与 slice 方式相同的问题。在查看 Scipy 代码时,这对我来说看起来像是一个错误。当您尝试将 dok_matrix 中的特定行和列设置为零时,当它已经为零时,会出现错误,因为它会在不检查该行和列是否存在的情况下尝试删除该值。

在回答您的问题时,您以不优雅的方式所做的正是 __setitem__ 方法当前使用您的优雅方法所做的事情(经过几次 isinstance 检查之后等等)。如果你想使用优雅的方式,你可以修复我在你自己的 Scipy 包中提到的错误,方法是打开 Lib/site-packages/scipy/sparse/ 中的 dok.py 并将第 222 行从

if value==0:

if value==0 and self.has_key((i,j)):

然后你可以使用优雅的方式,它应该工作得很好。我去提交了一个错误修复,但它已经为下一个版本修复了,这就是它修复的方式。

关于python - 将 numpy 数组添加到 scipy.sparse.dok_matrix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2674437/

相关文章:

python - 在 Python 中迭代和绘图?

python - 生成可变长度哈希

python - 如何查看用OpenCV生成的图像的金字塔?

python - 使用周期性边界条件模糊 3D numpy 数组

python - 在 Windows 上安装 scipy 包时出错

python - 为什么python中子进程的数量会影响子进程的内存消耗?

python - 检查字典键是否包含任何另一个字典的键并打印匹配对

python - python中list-to-numpy-to-list后的异常小数位

python - Pandas 对列中所有值都相等的值进行切片

python - 从稀疏 coo_matrix 获得的对角稀疏矩阵