【发布时间】:2019-01-31 23:47:34
【问题描述】:
在对numpy 数组进行切片时,我们会获得相应数据的视图。但是,scipy.sparse 的稀疏矩阵似乎并非如此。尽管the docs 简要提到了lil_matrix 类的切片,但尚不清楚如何(或是否)可以获得数据视图。
至少通过使用以下示例脚本,我没有成功获得稀疏矩阵的视图:
import numpy as np
from scipy.sparse import lil_matrix
def test(matrix):
print('\n=== Testing {} ==='.format(type(matrix)))
a = matrix[:, 0]
b = matrix[0, :]
a[0] = 100
M[0, 1] = 200
M[1, 0] = 200
print('a = '); print(a)
print('b = '); print(b)
M = np.arange(4).reshape(2, 2) + 1
S = lil_matrix(M)
test(M)
test(S)
哪些输出:
=== Testing <class 'numpy.ndarray'> ===
a =
[100 200]
b =
[100 200]
=== Testing <class 'scipy.sparse.lil.lil_matrix'> ===
a =
(0, 0) 100
(1, 0) 3
b =
(0, 0) 1
(0, 1) 2
测试于 Python 3.6.6, numpy==1.14.5, scipy==1.1.0。
【问题讨论】:
-
稀疏矩阵不做视图。您可以修改
.data属性的某些格式。 -
@hpaulj 你怎么知道?有这方面的文件吗?也许还有另一种与numpy语法不相似的方式?
-
对于
lil,数据表示为两个对象 dtype 数组,每行都有一个列表。其他格式使用 3 个数组或字典。没有人使用strides,这是ndarray views的重要组成部分。
标签: python python-3.x numpy scipy