如何将Matlab结构(字典)加载为Python字典?

2024-06-26 02:04:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我收到了一些大块的数据作为Matlab字典,我的任务是在Python上处理这些数据。这里我包括我的matlab dictionary的一小部分

到目前为止,我试图将其解包并用python编写一本词典,内容如下:

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

如果您可以从加载带有loadmat的.mat文件中看到,我得到了一种数组数组。在我的原始字典中,我有72个字段名,我想在其中用Python生成键。我只是不知道如何通过迭代这个数组来实现这一点

在这里,您可以看到我得到的一些输出:


Tags: 数据import内容dictionary字典数组词典matlab
1条回答
网友
1楼 · 发布于 2024-06-26 02:04:34

如果我了解您想要做什么,您需要遍历,也就是说matplotlib中的numpy数组

在酝酿了一段时间之后,我利用您提供的数据进行了另一次尝试。在这次尝试中,我遍历了数组数组,同时将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

下面是以下代码从myDictionary变量请求名为year的键的值的结果:

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

如果给定代码中的注释行未注释,则可以将上述结果视为输出

这个link帮助我理解了如何格式化matplotlib numpy数组以访问其字段值

这个post还帮助我理解了如何从新格式化的matplotlib numpy数组中获取值

前科

这里尝试遍历所需的数组,但不是完整的答案,而是谜题的一部分

如果您能够在这些数组中访问所需的数组,或许可以使用类似于以下内容的方法对其进行迭代:

免责声明:不确定键的值应该是什么样的整数

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}

相关问题 更多 >