【发布时间】:2019-07-22 11:08:21
【问题描述】:
设置
我知道 scipy 的 .sparse-module 中的稀疏矩阵与 numpy-arrays 不同。另外,我知道像here 这样的关于稀疏数组切片的问题。无论如何,这个问题和大多数其他问题都涉及切片的性能。
我的问题是关于如何应对他们不同的切片行为。让我们创建一个示例:
import numpy as np
from scipy import sparse
matrix = np.asarray([[0,0,0,1], [1,1,0,0], [1,0,1,0], [1,0,0,1], [1,0,0,1], [1,0,0,1]])
sparse_matrix = sparse.lil_matrix(matrix) # Or another format like .csr_matrix etc.
鉴于此设置,应用相同的切片会产生不同的输出:
matrix[:, 3]
# Output:
# array([ True, False, False, True, True, True], dtype=bool)
sparse_matrix[:, 3]
# Output:
# matrix([[ True],
# [False],
# [False],
# [ True],
# [ True],
# [ True]], dtype=bool)
问题
这有点令人失望,因为我需要第一个输出也适用于第二种情况。正如开头所说,我知道使用sparse_matrix.A 等会给我想要的结果。无论如何,将稀疏矩阵转换为数组与稀疏矩阵的初始用例相矛盾。
那么是否有可能在不将sparse-matrix 转换为数组的情况下实现相同的切片结果?
编辑:
为了澄清起见,因为我的问题可能对此感到困惑:sparse_matrix 上的切片应具有与 matrix 相同的输出,这意味着类似 sparse_matrix[:, 3] 的内容应输出 ([ True, False, False, True, True, True])。
【问题讨论】:
-
您可以使用
matrix[:, 3:4]获得类似sparse_matrix[:, 3]的输出。 -
稀疏矩阵就像
np.matrix。像这样的索引返回一个总是 2d 的矩阵。 -
@WarrenWeckesser:我更新了我的问题以澄清这一点(抱歉,这令人困惑):
sparse_matrix的输出应与matrix相同,而不是相反。 -
"
sparse_matrix上的切片应与matrix具有相同的输出"。问题是matrix是一个二维numpy 数组,所以matrix[:, 3]是一个一维 数组。sparse_matrix是一个稀疏矩阵对象,对一个稀疏矩阵进行切片总是会返回另一个稀疏矩阵,而这些对象总是是二维的。你必须做类似sparse_matrix[:, 3].A.ravel()的事情。
标签: python arrays numpy scipy sparse-matrix