背景:我正在与一位教授合作,将一些MatLab脚本转换为python(同时学习python),所以我为此感到抱歉。
我正在尝试在python中读取.mat文件。这是我的示例代码;
import numpy as np
from scipy.io import loadmat
isochrones = loadmat('isochrones.mat')
现在,此.mat文件包含一个1x1结构的变量“ isoc”。在该变量的内部还有两个结构,“ e8”和“ e9”。
我在进入“ e8”和“ e9”小节时遇到困难。它们充满了更多的1x1变量,包括更多等等。
isoc = isochrones['isoc']
e8 = isoc['e8']
e9 = isoc['e9']
到目前为止,我能够做到,但是之后我陷入困境。当我打印出“ e9”的内容时,它会列出其中的所有数据值,并打印出包含dtype的内容,以便在其中查看“ e9”变量中的文件。
这是一个包含.mat文件的Google驱动器链接:https://drive.google.com/open?id=1kpZsHBtWll-HMd28zQ12L8v1ahWClCaM
答案 0 :(得分:2)
我看过.mat文件:
e8[0][0][0][0][0]
对应于isoc.e8.one:即[[B], [V], [logage]]
e8[0][0][0][0][1]
对应于isoc.e8.two:即[[B], [V], [logage]]
e8[0][0][0][0][0][0][0][0]
将提取isoc.e8.one.B,即[14.591, ..., -1.415]
e8[0][0][0][0][0][0][0][1]
将提取isoc.e8.one.V,即[13.014, ..., -2.990]
e8[0][0][0][0][1][0][0][0]
将提取isoc.e8.two.B,即[14.590, ..., 0.818]
基于@hpaulj所说的内容,以及一些研究,我加入了我提出的列表列表:
import pandas as pd
from scipy.io import loadmat
import itertools
isochrones = loadmat('isochrones.mat')
isoc = isochrones['isoc']
e8 = isoc['e8']
e9 = isoc['e9']
keys = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
e8_dict = {}
e9_dict = {}
for i in range(len(keys)):
e8_dict[keys[i]] = [list(itertools.chain.from_iterable(j)) for j in e8[0, 0][0, 0][i][0, 0]]
e9_dict[keys[i]] = [list(itertools.chain.from_iterable(k)) for k in e9[0, 0][0, 0][i][0, 0]]
e8_df = pd.DataFrame.from_dict(e8_dict, orient='index', columns=['B', 'V', 'logage'])
e9_df = pd.DataFrame.from_dict(e9_dict, orient='index', columns=['B', 'V', 'logage'])
因此,isoc.e8.one
的数据可以通过e8_df.loc['one']
访问
并且isoc.e8.one.B
的数据可以通过e8_df.loc['one']['B']
访问,它返回B数据的数组。
下图显示了e8_df的打印输出