2013-11-19 3 views
4

Я столкнулся с различием в том, как разрезание скудной разреженной матрицы работает в 0.10.0 и 0.10.1. Рассмотрим следующий фрагмент кода:Нарезка скудной разреженной матрицы с использованием булевой маски

from numpy import array, ravel 
from scipy.sparse import csr_matrix 

mat = csr_matrix(array([[1, 0, 0], [0,1,0], [1,0,0]])) 
desired_cols = ravel(mat.sum(0)) > 0 

print mat[:, desired_cols].A 

В SciPy 0.10.0, я получаю то, что я ожидаю, чтобы получить:

[[1 0] 
[0 1] 
[1 0]] 

В 0.10.1 и 0.12.0, я получаю

[[0 0 1] 
[1 1 0] 
[0 0 1]] 

Я не уверен, что это ошибка, или я делаю что-то неправильно. Я получаю те же результаты, используя coo_matrix и csc_matrix.

Я пытаюсь удалить все строки, сумма которых равна 0 из матрицы. Я понимаю, что csr_matrix не поддерживает эффективное разделение столбцов, и я не должен быть этим.

+0

Что такое 'wish_cols' в этих случаях. В последнем scipy (0.13.0) результаты соответствуют вашему первому (0.10.0). Вам, возможно, придется копаться в источнике github для scipy, если вы хотите отследить изменения еще в версиях. – hpaulj

ответ

1

Что необходимо в этих случаях. В последнем scipy (0.13.0) результаты соответствуют вашему первому (0.10.0). Вам, возможно, придется копаться в источнике github для scipy, если вы хотите отследить изменения еще в версиях.

+0

Значение 'wish_cols' - это' array ([True, True, False], dtype = bool) '. Проблема решена путем обновления до scipy 0.13.0. – mbatchkarov

1

Использование np.flatnonzero(desired_cols) вместо desired_cols и scipy.sparse будет поддерживать его. Полная поддержка API матриц недоступна в scipy.sparse, и функции постепенно внедряются.

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