【问题标题】:How to convert mat file to numpy array如何将mat文件转换为numpy数组
【发布时间】:2020-06-09 03:53:35
【问题描述】:

我想将大小为 600 x 600 的 mat 文件转换为 numpy 数组,但出现此错误“float() 参数必须是字符串或数字,而不是 'dict'”我想知道如何修复它。

    import numpy as np
    import scipy.io as sio
    test = sio.loadmat('Y7.mat')
    data=np.zeros((600,600))
    data[:,:]=test

【问题讨论】:

  • 仔细阅读loadmat 文档。它产生一个包含数组的字典。它本身不是一个数组。
  • 那么,如何将mat文件转换为numpy数组呢?我尝试了堆栈溢出中的所有解决方案,但没有一个对我有用。
  • 你不转换它。您在加载的字典中找到所需的数组。你读过文档吗?? docs.scipy.org/doc/scipy/reference/generated/…

标签: arrays numpy scipy


【解决方案1】:
In [240]: from scipy.io import loadmat                                                        

使用我从过去的 SO 问题中获得的测试垫文件:

In [241]: loadmat('test.mat')                                                                 
Out[241]: 
{'__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Sat Mar 21 20:09:30 2020',
 '__version__': '1.0',
 '__globals__': [],
 'x': array([[ 0,  3,  6,  9],
        [ 1,  4,  7, 10],
        [ 2,  5,  8, 11]])}

loadmat 给了我一本字典(见 {}?)。这恰好有一个数组,键为“x”。所以我只是用标准的字典索引来访问它:

In [242]: _['x']                                                                              
Out[242]: 
array([[ 0,  3,  6,  9],
       [ 1,  4,  7, 10],
       [ 2,  5,  8, 11]])

x 是保存此文件的 MATLAB 会话中的一个变量。

我对您的文件中的内容一无所知。 print(list(data.keys())) 可用于查看这些键/变量名称。

我试图让您查看 loadmat 文档,并看到它:

Returns
    mat_dictdict
        dictionary with variable names as keys, and loaded matrices as values.

【讨论】:

  • 我的文件的键和变量 ['header', 'version', 'globals', ' Ar'] 是 float32 、列表、字节、str 的数组。由于 mat 文件版本是 7.3 Maltab 文件,我需要一个 HDF5 python 库来读取 MATLAB 7.3 格式的 mat 文件。我在此链接 htps://stackoverflow.com/questions/874461/read-mat-files-in-python 上使用了解决方案,但出现此错误:无法打开文件(未找到文件签名)
  • 你试过data['Ar']吗?
  • 如果loadmat 没有引发错误,并且给了您dict,那么这是一个有效的pre-HDF5 文件。您只需使用正确的key 即可访问所需的数组。
  • 加载垫没有出现错误,也没有引发错误。如何在下面的代码中使用正确的键?f = h5py.File('Y7.mat','r') data = f.get('data/variable1') data = np.array(data)
  • 我使用 hdf5storage.write 命令将其保存为 h5 文件,然后使用命令 np.savez_compressed 将其压缩为 npz 文件。大小从 400 kb 减少到 1 kb!我不确定所有数据是否都存在于 npz 文件中。我做这些事情的原因是我的 mat 文件大小约为 600 kb,我想将其保存为 npz 以减少数据大小,以便将 100000 个数据提供给我的 CNN 代码。
猜你喜欢
  • 2017-10-12
  • 2019-09-03
  • 1970-01-01
  • 1970-01-01
  • 2018-02-05
  • 2020-02-04
  • 2019-10-23
  • 1970-01-01
  • 2021-12-18
相关资源
最近更新 更多