Я надеюсь, что мой вопрос ясен, но, скажем, у меня есть разреженная матрица, подобная следующей:
import numpy as np
a = np.eye(5, 5)
a[0,3]=1
a[3,0]=1
a[4,2]=1
a[3,2]=1
a = csr_matrix(a)
[[ 1. 0. 0. 1. 0.]
[ 0. 1. 0. 0. 0.]
[ 0. 0. 1. 0. 0.]
[ 1. 0. 1. 1. 0.]
[ 0. 0. 1. 0. 1.]]
я хочу получить, например, все строки со значением столбца 2, равным '1'в качестве разреженной матрицы, например:
(0, 2) 1.0
(1, 3) 1.0
(1, 2) 1.0
(1, 0) 1.0
(2, 4) 1.0
(2, 2) 1.0
, я хочу, чтобы все строки со значением столбца 2 равнялись' 0 ', как другая разреженная матрица, например:
(0, 3) 1.0
(0, 0) 1.0
(1, 1) 1.0
Я не уверен, эффективен ли мой код или нет, но сейчас я сделал следующее:
b = np.asarray(a.getcol(2).todense()).reshape(-1)
iPos = np.nonzero(b)[0]
iZero = np.nonzero(np.logical_not(b))[0]
a1 = a[iPos, :]
a0 = a[iZero, :]
Так есть ли более элегантный способ сделать это?Заранее спасибо.