2013-12-13 3 views
2

Я инициализировать пустую разреженную матрицу с помощьюПроверьте SciPy разреженной записи матрицы существует

S = scipy.sparse.lil_matrix((n,n),dtype=int) 

Как и ожидался print S не показывает ничего, так как ничего не было назначено. Но если я тест:

print S[0,0]==0 

Я получаю true.

Есть ли способ проверить, было ли задано значение раньше? Например. по линиям ifempty?

+0

Точку разреженной матрицы состоит в том, что большинство значений равно * 0 *. Нет «неназначенного» значения. –

+0

Это не совсем так. Если я назначу явное значение 0 записи, то есть 'S [0,0] = 0', и я вызываю' print S', я получаю возвращаемое значение: '(0, 0) 0'. Так что его можно отличить от неназначенного и 0. – Markus

+0

Несомненно, но вы не сможете сказать от доступа к S [0,0]. Вам нужно будет вникать в основное представление. Это будет зависеть от формата разреженной матрицы (например, CSR, DOK, COO и т. Д.). –

ответ

1

Вы можете проверить сохраненные значения с

def get_items(s): 
    s_coo = s.tocoo() 
    return set(zip(s_coo.row, s_coo.col)) 

Demo:

>>> n = 100 
>>> s = scipy.sparse.lil_matrix((n,n),dtype=int) 
>>> s[10, 12] = 1 
>>> (10, 12) in get_items(s) 
True 

Обратите внимание, что для других типов разреженных матриц, 0 можно expicetely установить:

>>> s = scipy.sparse.csr_matrix((n,n),dtype=int) 
>>> s[12, 14] = 0 
>>> (12, 14) in get_items(s) 
True 
+0

Я не рекомендую в зависимости от функции «явного нуля» в версиях Scipy, особенно в строках типа 's [12, 14] = 0'. Насколько мне известно, это не проверенная функция API. – joeln

Смежные вопросы