У меня есть две большие матрицы scipy.sparse.csr_matrix
. Я не могу их умножить, потому что мне не хватает памяти. Структура разреженности разрушается после точечного произведения из-за большого количества очень маленьких ненулевых значений. Можно спасти структуру разреженности, установив эти числа в ноль и вызвав eliminate_zeros
, но это не сработает, когда у меня не хватит памяти.
Если я знаю, что я sh проигнорирую значения ниже a заранее определенное пороговое значение, как я могу использовать эту информацию? В настоящее время работает только один подход, который работает, но он очень медленный:
chunksize=10000
numiter = A.shape[0]//chunksize
CS=[]
for i in range(numiter):
C = A[i*chunksize:(i+1)*chunksize].dot(B)
C.data[C.data<0.1]=0
C.eliminate_zeros()
CS.append(C)
C=sp.sparse.hstack(CS)
Я вычисляю точечное произведение 10000 строк за раз и обнуляю значения меньше некоторого порогового значения (в этот случай 0,1). Таким образом, я могу построить полную матрицу без исчерпания памяти. Однако этот подход действительно медленный. Буду признателен за любые предложения!