2016-01-07 8 views
1

У меня проблема: я хочу создать структуру, подобную Matlab, в Python. Структура, которую мне нужно создать, имеет два поля: «val» и «sl». Он должен быть структурой 1x2. Поле «val» должно иметь две матрицы 3x3 внутри (например, A и B), тогда как поле «sl» должно иметь два значения внутри (например, 137 и 159). Окончательная структура должна быть такая:Создать структуру Matlab в Python

val sl 
3x3 137 
3x3 159 

В Matlab код: struct(1).val=A;struct(1).sl=137;struct(2).val=B;struct(2).sl=159 В питоне я попытался hval = fromarrays([[A, B], [137, 159]], names=['val', 'sl']), но это дает мне эту ошибку: Файл «/ Opt/местная/Библиотека/Python/структуры по .framework/Версии/2.7/lib/python2.7/site-packages/numpy/core/records.py ", строка 608, fromarrays Повысить ValueError (" несоответствие формы массива в массиве% d "% k)

ValueError: несоответствие формы массива в массиве 1 Кто-нибудь знает, как решить эту проблему?

+0

Есть ли причина, по которой это должно быть «запись»? Обычно в Python для этого используется 'pandas.DataFrame'. – TheBlackCat

ответ

1

Не похоже, что вы можете хранить ndarray в качестве элемента записи, так как поля должны иметь одинаковые размеры. Похоже, что добавление массива 3x3 в поле val делает размеры этого поля 2x3x3, а не хранится как дискретный массив.

Однако, вы можете эмулировать такой же структуры с использованием Python dict и list типов следующим образом:

struct = { 
    'val': [A, B], 
    'sl': [137, 138] 
} 

Теперь Вы можете получить доступ к этим элементам следующим образом (обратите внимание на порядок аргументов отличается):

struct['val'][0] # = A 
struct['sl'][1] # 138 

Чтобы сохранить порядок инвертировать структуру ДИКТ/список:

struct = [ 
    {'val': A, 'sl': B}, 
    {'val': 137, 'sl': 138}, 
] 

struct[0]['val'] # A 
struct[1]['sl'] # 138 
+0

Большое спасибо –

Смежные вопросы