У меня есть csr_matrix
, который очень большой (570000 x 570000), и я хочу сделать питание на 3, которое требует много оперативной памяти (питание на 2 работает хорошо)!это невозможно с типом данных int64
, который по умолчанию dtype
равен csr_matrix
.Я пытаюсь изменить его на dtype=numpy.int8
, но, похоже, не работает!И он выдает MemoryError
Исключение выделения для int64
!!!
Я попытался изменить dtype=numpy.int8
в csr_matrix
аргументах создания, я также попытался привести вручную при создании списка с numpy.int8(value)
для значения иnumpy.int32(row)
и numpy.int32(col)
, но выдает одну и ту же ошибку независимо от того, какой тип я разыгрываю / даю
import numpy as np
from scipy import sparse
def matrix_power(data):
m = sparse.csr_matrix(
(
[np.int8(v) for row in data.values() for v in row.values()], (
[np.int32(row_n) for row_n, row in data.items() for v in row],
[np.int32(column) for row in data.values() for column in row]
)
), dtype=np.int8)
print("matrix created")
m = m**3 #error occurs here
return m
Ожидается, что значение будет int8
, но я получаю int64
в сообщении об ошибке (когда я установил dtype=float
, он работает правильно даже в сообщении об ошибке)
Сообщение об ошибке: numpy.core._exceptions.MemoryError: Unable to allocate array with shape (125248475,) and data type int64
и, если это полезно, данные сохраняются в json, который затем загружается в массивмассив {'row': {'col': value}}, например {'5': {'3': 2, '1': 1}}, что означает, что в столбце 3 строки 5 указано значение 2, а в первом столбце - 1 вматрица и остальные 0
файл json - 30 МБ, а матрица квадратной формы - 1,5 ГБ, но я не знаю о матрице Cubed из-за проблемы с оперативной памятью