【问题标题】:Making a sparse matrix containing array制作包含数组的稀疏矩阵
【发布时间】:2019-05-05 04:30:50
【问题描述】:

我正在尝试构建一个这样的稀疏矩阵:

         0   |   1   |   2   |
0        0   |[1,2,3]|[7,8,9]|
1     [4,5,6]|   0   |   0   |

在 Python 中使用 scipy.sparse 中的 csr_matrix

我这样做如下。但它适用于一维数组。

csr_matrix(([[1,2,3][7,8,9][4,5,6]], ([0,0,1], [1,2,0])), shape=(2,3))

但我有错误ValueError: row, column, and data arrays must be 1-D

还有其他的包在做吗?

对不起,我的英语不好。

【问题讨论】:

  • 一个想法是使用pandas 数据框作为矩阵。 pandas.pydata.org/pandas-docs/stable/generated/…
  • scipy.sparse 最适合简单的数值,因此矩阵可用于矩阵乘积和线性代数等计算。所以你的想法不适合。如果你可以构建这样一个数组,它会用来做什么?它甚至不适合 numpy 数组或 pandas 数据帧(尽管可能)。
  • 有一种块矩阵格式可能适合您的需求。我用的不多,但这是最近使用它的答案 - stackoverflow.com/questions/53574046/…
  • 我需要它能够通过具有 3 个特征的逻辑回归进行分类因为实际上我对 1 个特征做同样的事情。

标签: python matrix scipy sparse-matrix


【解决方案1】:

这是您的数组的bsr 表示形式。

使用普通的 (2,3) csr 矩阵来查找块的 indicesindptr

In [335]: M1 = sparse.csr_matrix([[0,1,1],[1,0,0]])
In [336]: M1.A
Out[336]: 
array([[0, 1, 1],
       [1, 0, 0]], dtype=int64)

定义data 块。我不得不订购它们以匹配 M1 布局:

In [337]: data = np.arange(1,10).reshape(3,1,3)[[0,2,1],:]
In [338]: data
Out[338]: 
array([[[1, 2, 3]],

       [[7, 8, 9]],

       [[4, 5, 6]]])

现在制作一个bsr 矩阵:

In [339]: M = sparse.bsr_matrix((data, M1.indices, M1.indptr), shape=(2,9))
In [340]: M
Out[340]: 
<2x9 sparse matrix of type '<class 'numpy.int64'>'
    with 9 stored elements (blocksize = 1x3) in Block Sparse Row format>
In [341]: M.A
Out[341]: 
array([[0, 0, 0, 1, 2, 3, 7, 8, 9],
       [4, 5, 6, 0, 0, 0, 0, 0, 0]])

它表示一个 (2,9) 矩阵,但值存储在 3 个(1,3) 块中。对于显示和大多数计算,它被转换为更传统的csr 矩阵。

这些信息也可以存储为字典:

In [349]: adict = {}
In [350]: adict[(0,1)] = data[0]
     ...: adict[(0,2)] = data[1]
     ...: adict[(1,0)] = data[2]
     ...: 
     ...: 
In [351]: adict
Out[351]: 
{(0, 1): array([[1, 2, 3]]),
 (0, 2): array([[7, 8, 9]]),
 (1, 0): array([[4, 5, 6]])}

sparse.dok_matrix 也是 dict 的子类。但它不接受dtype=object,这是将数组存储为元素的唯一方法。

【讨论】:

    猜你喜欢
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 2020-04-20
    相关资源
    最近更新 更多