我有两个矩阵A和B。我想找出它们之间的集合差异:A中但不在B中的所有元素的集合。所得矩阵必须具有相同的形状,因此另一种放置方式是必须将在A和B中都找到的元素设置为零。例如,使用以下矩阵:
import numpy as np
from scipy.sparse import csr_matrix
A = csr_matrix([[1, 2, 3, 4, 5]])
B = csr_matrix([[6, 0, 7, 0, 9]])
结果将是:
C = [[0, 2, 0, 4, 0]]
到目前为止,我一直在尝试使用python的set Difference函数:
def set_difference(a,b):
a = set(a)
b = set(b)
c = a.difference(b)
return c
但是,这不起作用-似乎csr_matrix不能变成集合。因此,如果我不使用集合,如何得到两个矩阵的集合差?
看来您使用的是普通矩阵,而不是稀疏矩阵。根据您的问题描述,以下方法将起作用:
A = [1, 2, 3, 4, 5]
B = [6, 0, 7, 0, 9]
C = [A[i] if not B[i] else 0 for i in range(len(A))]
任何非零值的结果都为“ true”,因此当B [i]对于相同的索引为零时,这将创建所有A [i]值的列表,否则它将为该索引填充零。
编辑:使用csr_matrices尝试使用以下语法:
C = csr_matrix([A[0,i] if not B[0,i] else 0 for i in range(A.size)])
EDIT2:对于2D稀疏矩阵,请使用以下命令:
C = csr_matrix( [ [A[i,j] if not B[i,j] else 0 for i in range(A.shape[0]) ] for j in range(a.shape[1]) ])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句