稀疏矩阵A:
1 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1
如果用三元组表示B:
1,1,1 1,2,1 2,3,1 3,2,1 4,1,1 4,4,1
稀疏矩阵A中第一行和第三行进行与(&)运算,或对某一行进行否(~)运算。怎样映射到三元组中进行运算?
numpy和scipy中有没有相关的函数,可以构造稀疏矩阵,并进行行间的运算(& ~ |)?
谢谢
三叔2016-10-22 17:01:18
稀疏矩阵, 行间的运算(& ~ |)这两个没问题
python3
>>> import numpy as np >>> #稀疏矩阵 >>> A =[[1,1,0,0], [0,0,1,0], [0,1,0,0], [1,0,0,1]] >>> matA = np.array(A,dtype=np.bool) >>> matA[0] array([ True, True, False, False], dtype=bool) >>> ~matA[0] # 非 array([False, False, True, True], dtype=bool) >>> matA[1] | matA[3] # 或 array([ True, False, True, True], dtype=bool) >>> matA[0] & matA[2] # 与 array([False, True, False, False], dtype=bool) >>>
映射三元组 没问题
>>> from scipy import sparse >>> coo_A = sparse.coo_matrix(A) >>> print(coo_A) (0, 0) 1 (0, 1) 1 (1, 2) 1 (2, 1) 1 (3, 0) 1 (3, 3) 1 >>> print(coo_A.todense()) [[1 1 0 0] [0 0 1 0] [0 1 0 0] [1 0 0 1]]
coo 是坐标的意思,构造方法如下:
>>> from scipy import sparse >>> coor=( # 坐标:行,列,值 (0, 0, 1), (0, 1, 1), (1, 2, 1), (2, 1, 1), (3, 0, 1), (3, 3, 1) ) >>> *rc,data = zip(*coor) >>> rc # 坐标:行,列 [(0, 0, 1, 2, 3, 3), (0, 1, 2, 1, 0, 3)] >>> spr_A = sparse.coo_matrix((data,rc),shape=(4,4)) # 4 x 4 >>> print(spr_A.toarray()) [[1 1 0 0] [0 0 1 0] [0 1 0 0] [1 0 0 1]] >>> r0 = spr_A.getrow(0).toarray() # 获取一行 >>> r0 array([[1, 1, 0, 0]], dtype=int32) >>>
多数计算都必须用.toarray()转换为矩阵