In [193]: from scipy import sparse
In [194]: a=['foo','panda','donkey','bird','egg']
...: b='foo'
...: idxL=sparse.csr_matrix((1,5), dtype=bool)
...: idxTemp=np.array(list(map(lambda x: x in b, a)))
Разреженная матрица:
In [195]: idxL
Out[195]:
<1x5 sparse matrix of type '<class 'numpy.bool_'>'
with 0 stored elements in Compressed Sparse Row format>
In [196]: idxL.A
Out[196]: array([[False, False, False, False, False]])
плотный массив;обратите внимание, что это 1d
In [197]: idxTemp
Out[197]: array([ True, False, False, False, False])
Индексирование разреженной матрицы:
In [198]: idxL[0,0]
Out[198]: False
Добавление - теперь это плотная матрица:
In [199]: idxLL = idxL + idxTemp
In [200]: idxLL
Out[200]: matrix([[ True, False, False, False, False]])
In [201]: idxLL[0,0]
Out[201]: True
[0]
из матрицы выбирает первую строку, но результат все равно будет 2d. [0][0]
индексация не помогает. Этот стиль индексации работает с 2d ndarray
, но [0,0]
, как правило, лучше.
In [202]: idxLL[0]
Out[202]: matrix([[ True, False, False, False, False]])
In [203]: idxTemp[0]
Out[203]: True
edit
Мы можем сделать разреженную матрицу из idxTemp
напрямую:
In [257]: M = sparse.csr_matrix(idxTemp)
In [258]: M
Out[258]:
<1x5 sparse matrix of type '<class 'numpy.bool_'>'
with 1 stored elements in Compressed Sparse Row format>
In [259]: M.A
Out[259]: array([[ True, False, False, False, False]])
In [260]: print(M)
(0, 0) True
Нет необходимости добавлять его в idxL
. Можно добавить:
In [261]: idxL+M
Out[261]:
<1x5 sparse matrix of type '<class 'numpy.bool_'>'
with 1 stored elements in Compressed Sparse Row format>
Я бы не рекомендовал создавать запасную матрицу, добавляя матрицы.