【问题标题】:Creating sparse matrix using number signs from another matrix使用来自另一个矩阵的数字符号创建稀疏矩阵
【发布时间】:2017-08-08 07:26:44
【问题描述】:

我需要使用另一个矩阵示例中的数字符号和坐标创建一个稀疏矩阵:

A = array([[ 1  3 -2]
           [-3  4 -6]
           [ 4  7 -5]])

B = array([[1 2]
           [1 3]
           [2 3]
           [2 4]
           [2 5]
           [3 4]
           [4 5]])

Result sparce matrix:
    1   2   3   4   5   6   7
1[[ 1  -1   1   0.  0.  0.  0.]
2 [ 0.  0. -1   1   0. -1   0.]
3 [ 0.  0.  0.  1  -1   0.  1 ]]

行数由矩阵A的行数定义,列数由另一个矩阵B的行数定义,数字1或-1根据各自的个数填写列,示例:

First row matrix A [ 1  3 -2 ]
Result sparse [ 1  -1   1   0.  0.  0.  0.]    

1 第一列,-1 第二列,1 第三列,其余列 0。 应该在所有行上以这种方式完成。使用矩阵 B 也必须创建一个稀疏矩阵,但以另一种方式例如:

列数必须为5,行数由矩阵B的行数定义。但是在这个矩阵B中,第一列的所有数字都必须假设(-),那么它必须在与矩阵 A 相同的方法来创建稀疏矩阵,例如:

B = array([[1 2]
           [1 3]
           [2 3]
           [2 4]
           [2 5]
           [3 4]
           [4 5]])

Result matrix B all numbers in the first column (-)
B = array([[-1 2]
           [-1 3]
           [-2 3]
           [-2 4]
           [-2 5]
           [-3 4]
           [-4 5]])

Result sparse matrix:
   1   2   3   4   5
1[ -1  1  0.  0.  0.]
2[ -1  0.  1  0.  0.]
3[ 0.  -1  1  0.  0.]
4[ 0.  -1  0.  1  0.]
5[ 0.  -1  0.  0.  1]
6[ 0.  0.  -1  1  0.]
7[ 0.  0.  0.  -1  1]]

提示我使用scipy.sparse.coo_matrix,尝试了几种方法都做不到

【问题讨论】:

    标签: python numpy matrix scipy sparse-matrix


    【解决方案1】:

    我只是举了一个在Python create an empty sparse matrix中制作稀疏矩阵的例子

    但是对于这种情况:

    In [72]: A = np.array([[1,3,-2],[-3,4,-6],[4,7,-5]])
    In [73]: A
    Out[73]: 
    array([[ 1,  3, -2],
           [-3,  4, -6],
           [ 4,  7, -5]])
    

    A 绝对值的列号(但需要偏移)

    In [74]: cols = abs(A.ravel())
    In [75]: cols
    Out[75]: array([1, 3, 2, 3, 4, 6, 4, 7, 5])
    

    行号只是重复的A 行号

    In [76]: rows = np.arange(A.shape[0]).repeat(3)
    In [77]: rows
    Out[77]: array([0, 0, 0, 1, 1, 1, 2, 2, 2])
    

    而数据是A的标志。

    In [78]: data = np.sign(A).ravel()
    In [79]: data
    Out[79]: array([ 1,  1, -1, -1,  1, -1,  1,  1, -1])
    

    将这些提供给coo_matrix 构造函数。请注意,我使用cols-1,因为索引从 0 开始,而不是 1:

    In [80]: M = sparse.coo_matrix((data, (rows, cols-1)), shape=(3,7))
    In [81]: M
    Out[81]: 
    <3x7 sparse matrix of type '<class 'numpy.int32'>'
        with 9 stored elements in COOrdinate format>
    In [82]: M.A       # viewed as an array
    Out[82]: 
    array([[ 1, -1,  1,  0,  0,  0,  0],
           [ 0,  0, -1,  1,  0, -1,  0],
           [ 0,  0,  0,  1, -1,  0,  1]])
    

    对于计算和许多其他操作,sparse 会将其转换为 csr 格式。

    tod​​o - B 矩阵

    【讨论】:

      猜你喜欢
      • 2019-05-06
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      相关资源
      最近更新 更多