2016-07-26 1 views
0

Я переводил код matlab в python. У меня есть несколько матриц в файле .mat под названием «AK_1». Я хочу получить доступ к данным только в одной из этих матриц. Код matlab обращается к нему таким образом, где .response1 является искомой матрицей:Матрица в файле .mat с python

numtrials1 = subject_data1.response1 (1, :);

Я пробовал загружать все данные в dict, чтобы затем прокрутить его до нужного матрица с помощью этого кода, но это не привело к результату.

subject_data1_dict = {}

subject_data1 = scipy.io.loadmat ('./ MAT_Data_Full_AAAD_V2/AK_1.mat', subject_data1_dict)

Как я могу получить доступ только матрицу 'response1' в файле AK_1.mat?

+1

Вы прочитали документацию для 'scipy.io.loadmat'? – Suever

+0

как ответил jlarsch: «struct_as_record = False» находится на правильном пути, но он не загружает все матрицы – pproctor

ответ

1

Скажет, у вас есть myfile.mat со следующей структурой S:

S = 
    response1: [5x5 double] 
    response2: [5x5 double] 
    response3: [5x5 double] 

И вы хотите получить доступ к response1 из питона. Тогда:

>>> from scipy.io import loadmat 
>>> D = loadmat("myfile.mat", variable_names = ("S",)) 
>>> D["S"]["response1"] # returns matlab's S.response1 

Если вы хотите выбрать другие переменные, содержащиеся в файле, чем просто S, вы просто добавить их в кортеже, то есть variable_names=("S","otherVar")

Очевидно, что если все вы заинтересованы в это response1 массив, вы можете обойти сборник всего словаря, то есть:

>>> response1 = loadmat("myfile.mat", variable_names = ("S",))["S"]["response1"] 
>>> response1 
array([[ array([[ 9, 1, 2, 2, 7], 
     [10, 3, 10, 5, 1], 
     [ 2, 6, 10, 10, 9], 
     [10, 10, 5, 8, 10], 
     [ 7, 10, 9, 10, 7]], dtype=uint8)]], dtype=object) 
+0

Я думаю, что он не имеет трех независимых переменных внутри файла .mat, а представляет собой одну структуру Matlab, которая содержит несколько массивов. следовательно, точечная нотация (subject_data1.response1)? – jlarsch

+0

ах, вижу, хорошо. в этом есть смысл; Я неправильно понял вопрос. Я уточню свой ответ. :) –

+0

это точный способ сделать это, очень простое решение. Благодаря! – pproctor

0

создать и сохранить структуру, содержащую 3 матрицы в MATLAB:

a=1:5 
b.aa=a 
b.bb=a 
b.cc=a 
save(struct.mat,'b') 

нагрузки .mat файл в Python

from scipy.io import loadmat 
matfile = loadmat('d:/struct.mat') 

теперь вы можете получить доступ, например, b.aa и b.bb с помощью:

matfile[('b')][0][0][0] 
matfile[('b')][0][0][1] 

Это то, что вы хотели?

+0

, что дает примерно такой же результат, как и мой код, а не все отображаемые матрицы, включая тот, который мне нужен для доступа – pproctor

+0

можете ли вы связать файл .mat со структурой, подобной той, которая вызывает проблему? – jlarsch

+0

@pproctor проверить отредактированный ответ – jlarsch

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