2016-05-04 4 views
0

Итак, мне нужно загрузить много файлов .mat с некоторыми функциями для его построения.Загрузите много файлов в один массив - Python

Каждый массив, который будет построена загружается в словарь:

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') 
... 

поэтому я должен взять элемент в dictionarie, я нужно, чтобы построить после того, как:

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

После этого, я могу построить данные. Он работает, но выглядит мне немым (если у меня 100 векторов, это займет некоторое время ...). Есть ли лучший способ выполнить эту задачу?

+0

Использовать петлю, может быть? – usr2564301

+0

Да, спасибо Rad. но как я могу хранить эти массивы? В другой массив с большей формой? Просто извините, извините за вопрос noob. \ –

+0

Если вам нужен массив массивов, то да, Python позволяет это. Просто продолжайте «добавлять их», я думаю (проверьте документацию). – usr2564301

ответ

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) ] 

Если они имеют общее место, вы можете рассмотреть возможность использования один из различных подходов сканирования каталога (opendir или glob, чтобы назвать два).

После того, как у вас есть список имен файлов, вы можете прочитать словари:

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] 
+0

Большое спасибо @Austin Hastings. Это именно то, что я ищу. Это было очень полезно! –

Смежные вопросы