Как прочитать файл Abaqus .mtx?Scipy.io.mmread выдает ошибку «недостаточно значений для распаковки» - PullRequest
0 голосов
/ 23 октября 2018

Я бы хотел прочитать файл .mtx, используя Python.Файл .mtx создается Abaqus и выглядит следующим образом:

1,1, 1,1,  1.939258533333333e-02
1,2, 1,2,  1.939258533333333e-02
2,1, 2,1,  1.889629366666666e-02

Кажется, что scipy.io.mmread будет работать, но когда я запустил следующий код:

import scipy.io

with open(abs_file_path) as mass_file:
    otpt = scipy.io.mmread(mass_file)

Я получил следующую ошибку:

Traceback (most recent call last):
  File "./test_read_mass_mtx.py", line 12, in <module>
    read_mass(file_path)
  File "/home/user/Desktop/Temp/python/data_functions/read_mass_mtx.py", line 6, in read_mass
    otpt = scipy.io.mmread(mass_file)
  File "/home/user/anaconda3/lib/python3.6/site-packages/scipy/io/mmio.py", line 76, in mmread
    return MMFile().read(source)
  File "/home/user/anaconda3/lib/python3.6/site-packages/scipy/io/mmio.py", line 414, in read
    self._parse_header(stream)
  File "/home/user/anaconda3/lib/python3.6/site-packages/scipy/io/mmio.py", line 478, in _parse_header
    self.__class__.info(stream)
  File "/home/user/anaconda3/lib/python3.6/site-packages/scipy/io/mmio.py", line 232, in info
    [asstr(part.strip()) for part in line.split()]
ValueError: not enough values to unpack (expected 5, got 3)

Спасибо!

1 Ответ

0 голосов
/ 23 октября 2018

Abacus и scipy не согласны с тем, как должен выглядеть файл Matrix Market.

Первая проблема, которая вызывает вашу ошибку, заключается в том, что scipy ожидает пробел между каждым столбцом, следовательно, ваш "ожидаемый 5, получил 3"" ошибка.Изменение вашего примера ввода вручную, чтобы содержать пробелы:

1, 1, 1, 1,  1.939258533333333e-02
1, 2, 1, 2,  1.939258533333333e-02
2, 1, 2, 1,  1.889629366666666e-02

Ошибка меняется на

ValueError: source is not in Matrix Market format

Это имеет смысл для меня, потому что документы mmreadговорит, что возвращаемое значение равно

Плотная или разреженная матрица в зависимости от формата матрицы в файле Matrix Market.

Что может означать, что есть хотя бы некоторые метаданные (заголовки?) отсутствует в файле, что делает его нестандартным.Так что либо

  1. файл не является правильным файлом .mtx, либо
  2. указанный формат не поддерживается scipy

В любом случае выВероятно, придется разобрать файл самостоятельно.Если вы знаете, что означают первые четыре столбца, вы, вероятно, можете легко разобрать его, используя numpy.loadtxt или что-то подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...