在Python中打开.mat文件的子部分

2024-05-28 19:35:18 发布

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

背景:我正在与一位教授合作,将一些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”的内容时,它列出了其中的所有数据值,还打印了包含的数据类型,其中可以看到“e9”变量中的文件

这是一个包含.mat文件的google驱动器链接:https://drive.google.com/open?id=1kpZsHBtWll-HMd28zQ12L8v1ahWClCaM


Tags: 文件import脚本示例google结构背景教授
1条回答
网友
1楼 · 发布于 2024-05-28 19:35:18

我已经查看了.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'])

因此,可以使用e8_df.loc['one']访问isoc.e8.one的数据 并且isoc.e8.one.B的数据可以通过返回B数据数组的e8_df.loc['one']['B']来访问

下图显示了e8_df的打印输出

printed output of e8_df

相关问题 更多 >

    热门问题