【问题标题】:Convert loaded mat file back to numpy array将加载的 mat 文件转换回 numpy 数组
【发布时间】:2019-09-03 02:45:45
【问题描述】:

我使用scipy.io.savemat() 将大小为 5000,96,96 的 numpy 数组中的图像保存到 .mat 文件中。

当我想将这些图像加载回 Python 时,我使用 scipy.io.loadmat(),但是,这次它们被放入字典中。

如何将它们从 Dictionary 整齐地放入 NumPy 数组?

我正在使用scipy.io.loadmat 加载 matlab 文件并希望将其放入 NumPy 数组中。图像是 dims = (5000,96,96)

scipy.io.savemat("images.mat")
z = scipy.io.loadmat("images.mat")

NumPy 数组中的图像

【问题讨论】:

标签: python numpy scipy spyder


【解决方案1】:

保存一个 3d 数组:

In [53]: from scipy import io                                                   
In [54]: arr = np.arange(8*3*3).reshape(8,3,3)                                  
In [56]: io.savemat('threed.mat',{"a":arr})                                     

加载它:

In [57]: dat = io.loadmat('threed.mat')                                         
In [58]: list(dat.keys())                                                       
Out[58]: ['__header__', '__version__', '__globals__', 'a']

按键访问数组(普通字典操作):

In [59]: dat['a'].shape                                                         
Out[59]: (8, 3, 3)
In [61]: np.allclose(arr,dat['a'])                                              
Out[61]: True

【讨论】:

    【解决方案2】:

    根据这篇文章: python dict to numpy structured array

    将字典转换为 numpy 数组的方法如下:

    import numpy as np
    result = {0: 1.1, 1: 0.7, 2: 0.9, 3: 0.5, 4: 1.0, 5: 0.8, 6: 0.3}
    
    names = ['id','value']
    formats = ['int','float']
    dtype = dict(names = names, formats=formats)
    array = np.array(list(result.items()), dtype=dtype)
    
    print(repr(array))
    

    这导致以下结果:

    array([(0, 1.1), (1, 0.7), (2, 0.9), (3, 0.5), (4, 1. ), (5, 0.8),
           (6, 0.3)], dtype=[('id', '<i4'), ('value', '<f8')])
    

    您是否有要转换的字典条目示例?

    【讨论】:

    • 他不需要结构化数组。
    • 这根本与问题无关。你发明了这个问题,然后解决了它。
    猜你喜欢
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 2018-02-05
    • 2017-04-11
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多