Как загрузить структуру (словарь) Matlab как словарь Python? - PullRequest
1 голос
/ 10 июля 2020

Мне передали некоторые объемные данные в виде словаря Matlab, и моя задача - поиграть с ними на Python. Здесь я включаю небольшое подмножество моего словаря matlab .

То, что я до сих пор пытался распаковать и создать словарь в python, это:

import scipy.io as spio
mydata = spio.loadmat('testdict.mat')
new = mydata.get('testdict')

Если вы можете видеть, загружая файл .mat с loadmat, я получаю что-то вроде массива массивов. В моем исходном словаре у меня есть 72 имени поля, в которых я хочу сделать ключи в Python. Я просто не могу понять, как выполнить итерацию по этому массиву, чтобы сделать это.

Здесь вы можете увидеть некоторые результаты, которые я получаю:

1 Ответ

0 голосов
/ 10 июля 2020

Если я понимаю, что вы хотели бы сделать, вы хотите перебрать столбцы , так сказать, этот массив numpy из matplotlib.

После еще немного заваривания я предпринял еще одну попытку, используя предоставленные вами данные. В этой попытке я перебирал массив массивов, добавляя имена полей массивов numpy и большинство внутренних значений массивов в словарь как ключи и значения соответственно:

import scipy.io as spio
import numpy as np

mydata = spio.loadmat('testdict.mat')
new = mydata.get('testdict')

recordarr = np.rec.array(new)
myDictionary = {}
myList = []

for field in recordarr.dtype.names: #iterates through field names of numpy array
    for array in recordarr[field]: #iterates through the array of each numpy array
        for value in array:
            myList.append(np.squeeze(value.flatten()[0]))
            #print(np.squeeze(value.flatten()[0]))
        
    myDictionary[field] = myList
    myList = []
    #break

Вот результат следующего кода, запрашивающего значение из ключа с именем year из переменной myDictionary :

In [153]: myDictionary['year']
Out[153]: [1852, 1852, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1854]

Приведенный выше результат можно рассматривать как результат, если закомментированные строки в данном коде раскомментированы.

Эта ссылка помогла мне понять, как отформатировать массив matplotlib numpy для доступа к значениям его полей.

Это сообщение также помогли мне понять, как получить значения из недавно отформатированных массивов matplotlib numpy.

Предыдущая попытка

Вот попытка перебрать желаемый массив, не полный ответ, а часть тем не менее, головоломка.

Если вы можете получить доступ к желаемому массиву в этих массивах, возможно, вы сможете перебирать их с помощью чего-то s аналогично этому:

Заявление об ограничении ответственности: не уверен, какие значения ключей предполагается использовать как целые числа.

arrays = [['Hello'], ['World'], ['Foobar'], ['Alice'], ['Bob'], ['Chuck']]
d = {}
n = 0

for array in arrays:
    for element in array:
        d[element] = n
        n += 1
    
print(d)

Вывод

{'Hello': 0, 'World': 1, 'Foobar': 2, 'Anne': 3, 'Bob': 4, 'Chuck': 5}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...