csr_matrix dtype не меняет тип - PullRequest
       60

csr_matrix dtype не меняет тип

0 голосов
/ 19 сентября 2019

У меня есть 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 из-за проблемы с оперативной памятью

...