Сципи: Союз разреженных булевых матриц - PullRequest
0 голосов
/ 17 февраля 2019

В Scipy, какой самый эффективный способ получить объединение A+B+C множественных логических разреженных (csr) матриц A,B,C (с одинаковой формой)?

Объединение означает среди прочего:

  • редкие изменения
  • возможны перекрытия

1 Ответ

0 голосов
/ 17 февраля 2019

Просто добавьте их:

import scipy.sparse as sparse
x = sparse.csr_matrix([[True, True, False], [False, False, False], [True, False, False]] , dtype=bool)
y = sparse.csr_matrix([[False, True, False], [False, True, False], [False, True, False]], dtype=bool)
print((x + y).todense())
>>[[ True  True False]
 [False  True False]
 [ True  True False]]

РЕДАКТИРОВАТЬ

Если вы хотите получить прямой доступ к индексам, вы можете использовать формат coo (который позволяет получить строкуи индекс col), составьте индексы и используйте np.unique (отказ от ответственности: я не проверял сравнение эффективности):

import scipy.sparse as sparse
c2=sparse.eye(5, k=1, dtype=bool, format='coo')
c1=sparse.eye(5, dtype=bool, format='coo')
c3 = c1.copy()
c3.row, c3.col = np.unique(np.hstack((np.vstack((c1.col, c1.row)),np.vstack((c2.col, c2.row)))), axis=1)
c3.data = np.ones(c3.row.size, dtype=bool)
c3.todense()
>> matrix([[ True, False, False, False, False],
    [ True,  True, False, False, False],
    [False,  True,  True, False, False],
    [False, False,  True,  True, False],
    [False, False, False,  True,  True]])
...