У меня есть csr_matrix, скажем, я назвал:Каков правильный способ добавления элементов в csr_matrix?
import scipy.sparse as ss
mat = ss.csr.csr_matrix((50, 100))
Теперь я хочу, чтобы изменить некоторые значения на этой матрице. Я называю:
mat[0,1]+=1
И я получаю:
SparseEfficiencyWarning: Changing the sparsity structure of a csr_matrix is expensive. lil_matrix is more efficient.
мне нужно только установить несколько значений (в масштабе матрицы наконец) сразу после создания матрицы. Позже я буду читать только столбцы или выполнять элементарные операции на всей матрице (например, .log1p()
)
Каким будет правильный способ? В настоящее время я могу просто игнорировать предупреждение, но может быть лучший способ, который не дает предупреждения.
CSR и CSC являются предпочтительными форматами для быстрых вычислений линейной алгебры. Обычно вы создаете свою матрицу как COO, LIL или DOK, конвертируете ее в CSC или CSR только один раз, затем выполняете дорогостоящую математику. Это поможет лучше понять ваш случай использования: что вы хотите сделать с матрицей? Нужно ли добавлять новые данные между дорогостоящими операциями или добавлять дополнения в начале? – Jaime
отредактирован, я надеюсь, что это более понятно. –
Создайте [COO matrix] (http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.sparse.coo_matrix.html), добавьте к ней значения, затем преобразуйте их в CSC или CSR, если для ваших операций есть преимущество в скорости. Если все, что вам нужно, - это элементарные операции, COO, вероятно, будет в порядке. Если вы хотите извлечь столбцы, выберите CSC, если строки CSR. – Jaime