Я отлаживаю некоторый матричный оператор, и мне удалось найти способ записать блоки большого оператора в файл. Скажем, если мой оператор выглядит так:
---------------
| A_00 | A_01 |
---------------
| A_10 | A_11 |
---------------
Тогда у меня есть код, выводящий четыре файла, A_00.mm
, A_01.mm
, A_10.mm
и A_11.mm
для каждого блока соответственно. Сейчас я пытаюсь объединить их в Python, чтобы выполнить некоторый анализ (собственные значения и c). Проблема в том, что формат Matrix Market не очень хорошо выстраивается. Например, мой A_00.m
будет выглядеть так:
# A_00.mm file
%%MatrixMarket matrix coordinate real general
%% A_00
%% v-v
648 648 92724
1 1 1.00000000000000000e+00
1 2 0.00000000000000000e+00
1 3 0.00000000000000000e+00
1 4 0.00000000000000000e+00
[...]
648 645 0.00000000000000000e+00
648 646 0.00000000000000000e+00
648 647 0.00000000000000000e+00
648 648 1.00000000000000000e+00
Но тогда мой A_01
запустится так:
# A_01.mm file
%%MatrixMarket matrix coordinate real general
%% A_01
%% v-p
648 216 31284
1 649 0.00000000000000000e+00
1 650 0.00000000000000000e+00
1 651 0.00000000000000000e+00
[...]
Он хранит индекс так, как если бы он был в большой системе блоков. Из-за этого использование scipy.io.mmread
дает ошибку, т.е.
/usr/local/lib/python3.7/site-packages/scipy/sparse/coo.py in _check(self)
283 if self.nnz > 0:
284 if self.row.max() >= self.shape[0]:
--> 285 raise ValueError('row index exceeds matrix dimensions')
286 if self.col.max() >= self.shape[1]:
287 raise ValueError('column index exceeds matrix dimensions')
ValueError: row index exceeds matrix dimensions
Я имею в виду, что мог бы сам написать читателя, но есть ли менее болезненный способ обойти это?