我需要创建一个稀疏矩阵,其中包含来自另一个矩阵示例的数字符号和坐标:
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个第3列,其余列为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,尝试了几种方法但无法做到
答案 0 :(得分:0)
我刚刚给出了在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
格式。
todo - B
矩阵