У меня есть две переменные r
и e
, которые оба являются словарями, со строками как ключи и csr_matrices как значения. Теперь я хочу утверждать, что они равны. Как мне это сделать?Python сравнить dict с csr_matrices как значения
Попробуйте 1:
from scipy.sparse.csr import csr_matrix
import numpy as np
def test_dict_equals(self):
r = {'a': csr_matrix([[0, 0 ,1], [0, 1, 0], [1, 0, 0]])}
e = {'a': csr_matrix([[0, 0 ,1], [0, 1, 0], [1, 0, 0]])}
self.assertDictEqual(r, e)
Это не работает:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all().
Попробуйте 2:
def test_dict_equals(self):
r = {'a': csr_matrix([[0, 0 ,1.01], [0, 1, 0], [1, 0, 0]])}
e = {'a': csr_matrix([[0, 0 ,1.01], [0, 1, 0], [1, 0, 0]])}
self.assertListEqual(r.keys(), e.keys())
for k in r.keys():
np.testing.assert_allclose(r[k], e[k])
Это также не работает:
AssertionError: First sequence is not a list: dict_keys(['a'])
Попробуйте 3:
def test_dict_equals(self):
r = {'a': csr_matrix([[0, 0 ,1.01], [0, 1, 0], [1, 0, 0]])}
e = {'a': csr_matrix([[0, 0 ,1.01], [0, 1, 0], [1, 0, 0]])}
self.assertListEqual(list(r.keys()), list(e.keys()))
for k in r.keys():
np.testing.assert_allclose(r[k], e[k])
Это также не работает:
TypeError: ufunc 'isinf' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
Спасибо. Я действительно тестирую A.data, A.indices и A.indptr. Каталог тестирования, на который вы ссылаетесь, является тестовым кодом для реализации csr_matrix, а не вспомогательных функций для тестирования. – physicalattraction
Примечание: возможно иметь две идентичные матрицы, но с различными индексами/индексами/массивами данных. Элементы, отличные от нуля, тогда не совпадают для обоих. Это приводит к ложному обнаружению неравновесия. – physicalattraction