ome*_*rbp 14 python numpy scipy
我想检查两个csr_matrix是否相等.
如果我做:
x.__eq__(y)
我明白了:
raise ValueError("The truth value of an array with more than one "
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all().
但是,这很好用:
assert (z in x for z in y)
有没有更好的方法呢?也许使用一些scipy优化的功能?
非常感谢
hpa*_*ulj 23
我们可以假设它们的形状相同吗?
In [202]: a=sparse.csr_matrix([[0,1],[1,0]])
In [203]: b=sparse.csr_matrix([[0,1],[1,1]])
In [204]: (a!=b).nnz==0   
Out[204]: False
这将检查不等式数组的稀疏性.
如果您尝试a==b(至少第一次使用它),它会给您一个效率警告.那是因为所有那些必须测试所有那些零.
您需要一个相对较新的版本来使用这样的逻辑运算符.你试图x.__eq__(y)在某个if表达式中使用,还是从那个表达式中得到错误?
通常,您可能希望首先检查几个参数.相同shape,相同nnz,相同dtype.你需要小心浮动.
对于密集数组np.allclose是测试相等性的好方法.如果稀疏数组不是太大,那也可能是好的
np.allclose(a.A, b.A)
allclose用途all(less_equal(abs(x-y), atol + rtol * abs(y))).你可以使用a-b,但我怀疑这也会产生效率警告.