将许多文件加载到一个数组中 - Python

时间:2016-05-04 23:35:16

标签: python numpy

所以,我必须加载许多带有一些功能的.mat文件来绘制它。

要绘制的每个数组都加载到字典中:

import numpy as np
import scipy.io as io


dict1 = io.loadmat('file1.MAT')
dict2 = io.loadmat('file2.MAT')  # type = dict
dict3 = io.loadmat('file3.MAT')
...

因此我必须采用我需要的词典元素,以便在之后进行策划:

array1 = dict1['data']
array2 = dict2['data']
array3 = dict3['data']
...

在此之后,我可以绘制数据。它有效,但看起来很愚蠢(如果我有100个向量,它将需要一些时间......)。有没有更好的方法来完成这项任务?

1 个答案:

答案 0 :(得分:4)

鉴于您正在讨论处理许多矩阵,您应该将它们作为集合进行管理。首先,让我们定义您的文件集。它可以是一个元组,也可以是一个列表:

Matrix_files = [ 'fileA.MAT', 'file1.MAT', 'no pattern to these names.MAT' ]

如果碰巧有模式,您可以尝试生成名称:

Matrix_files = [ 'file{}.MAT'.format(num) for num in range(1,4) ]

如果他们共享一个公共位置,您可以考虑使用各种目录扫描方法之一(opendirglob来命名两个)。

获得文件名列表后,您可以阅读以下词典:

def read_matrix(filespec):
    from scipy.io import loadmat
    md = loadmat(filespec)
    # process md
    return md

有了这个,你可以获得所有数据,或获得一些数据:

All_data = [read_matrix(f) for f in Matrix_files]

Some_data = [read_matrix(f)['data'] for f in Matrix_files]

如果您只关心数据,可以跳过函数定义:

from scipy.io import loadmat
Just_data = [loadmat(f)['data'] for f in Matrix_files]