【问题标题】:Loading a Cell Array (.mat file) into Python将元胞数组(.mat 文件)加载到 Python 中
【发布时间】:2017-12-27 15:09:53
【问题描述】:

我有一个 25x4x3 元胞数组,已保存到 .mat 文件中,现在需要加载到 Python 中。

我熟悉的一个简单的 .mat 文件,但是对于 Python 来说是新手,这个问题有点超出我的想象。 25 维和 4 维表示我需要稍后在我的代码中调用的整数。元胞数组中的 3 维包含日期时间数组、数据以及该数据的更多标签字符数组的列表。

例如(伪代码

.mat(1,1,1) = datetime arrays; 
.mat(1,1,2) = data corresponding to datetime arrays; 
.mat(1,1,3) = labels for each column in that data. 

显然我需要使用loadmat('.mat') 将其加载到 Python 中,然后我感到困惑,因为我的变量资源管理器没有显示 .mat 文件。我不知道如何挑选内容以正确地将datettime 索引、数字转换为浮点数等。

任何指导将不胜感激!

现在我只有:

filemat = 'Pdata.mat'
Pdata = sio.loadmat(filemat)

据我所知,它正在将 .mat 作为对象加载。

【问题讨论】:

  • Pdata 应该是字典,Pdata['mat'] 应该是编码mat 单元格的对象。因为它来自带有混合数据的cell,所以它不会是一个简单的numpy 数字数组。以前的loadmat 问题已经展示了如何从这些结构中提取信息(见侧栏)。您可能需要向我们展示变量(如果它不是太大的话)。

标签: python arrays matlab scipy mat


【解决方案1】:

你快到了。

首先让我构建一些示例 matlab 数据:

a = num2cell(rand(25,4,3));
a{13} = 'abc';
save('/tmp/tmp4Python.mat','a')

现在用 Python 加载它

import scipy.io
mat = scipy.io.loadmat('/tmp/tmp4Python.mat')

并赋值变量

a = mat['a']

现在,如果我们要访问'abc' 字符串,我们按如下方式进行(注意 Python 索引从 0 开始,而 MATLAB 索引从 1 开始):

a[12][0][0]

【讨论】:

  • 如果是使用v7.3格式保存的文件怎么处理?
  • @Tulkkas 在这种情况下,你可以import hdf5storage 然后hdf5storage.loadmat(file.mat)
【解决方案2】:

如何分配一个只包含范围值'a'的变量?这样可能吗?

x1 = mat['a', range(1, 20, 1)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 2018-04-26
    相关资源
    最近更新 更多