Преобразование вложенного списка для использования в Mathematica - PullRequest
0 голосов
/ 26 февраля 2019

Итак, у меня есть вложенный список из 3 х 3 матриц, таких как

a = [ [[1,0,3],[0,1,2],[-1,4,-8]], ... ]

И я пытаюсь найти эффективный способ преобразовать его в список, который Mathematica может читать.В этом случае я думал о преобразовании a в строку и замене каждого [на {и каждый] на}, а затем сохранении этой строки в файл.Я предполагаю, что это не самый эффективный метод.

Есть ли какие-либо предложения по эффективному алгоритму преобразования из вложенных в Python массивов в массивы mathematica?

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Как правило, если вы беспокоитесь об эффективности чтения / записи файлов, вам следует читать / записывать двоичные данные.И наоборот, если вы привержены текстовым файлам, не беспокойтесь об эффективности.

Я не вижу ничего существенного неправильного в вашем предложении записать вложенные массивы в строку, а затем заменить скобки на те, которые нравятся Mathematica,

Лично, если вложенный массив является регулярным, и если мы придерживаемся текстовых файлов, я бы предложил написать файл с:

  • строкой заголовка, содержащейэкстенты каждого измерения вложенного массива, для вашего примера это может быть 3, 3, ... (или, возможно, ..., 3, 3)
  • , а затем записать числа 3 в строку на столько строк, сколько необходимо

Если вложенный массив не является регулярным, вы можете разработать более сложную строку заголовка, чтобы сообщить Mathematica, как распределить следующие числа.Но что бы вы ни делали, сохраняйте это простым.

Возможно, вам удастся добиться большего, если использовать недавнюю возможность Mathematica ExternalEvaluate["Python", ...] и избежать записи и чтения файлов.Но это не то, что у меня есть опыт, чтобы передать.

0 голосов
/ 09 марта 2019

Вы можете использовать Import с "JSON" или "BSON" или "PythonExpression" для импорта данныхиз файла.Любой из них может быть напрямую экспортирован Python.

Wolfram Language (он же Mathematica) может импортировать и экспортировать множество форматов , причем приведенное выше является некоторыми из Базовых форматов itподдерживает.

Надеюсь, это поможет.

0 голосов
/ 26 февраля 2019

Сделать это как numpy.array и flatten it:

import numpy as np

arr = [[[0, 0, 0], [0, 0, 0], [0, 0, 0]],
 [[0, 0, 0], [0, 0, 0], [0, 0, 0]],
 [[0, 0, 0], [0, 0, 0], [0, 0, 0]]]

np.array(arr).flatten()
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0])

Или, если вы предпочитаете list, добавить tolist():

np.array(arr).flatten().tolist()
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...