2016-05-04 24 views
0

それで、プロットするためにいくつかの機能を持つ多くの.matファイルを読み込む必要があります。多くのファイルを1つの配列に読み込む - 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

はい、ありがとうございます。この配列をどのように保存できますか?より大きな形状の別の配列に?ちょうど戸惑って、ごめんなさい。 \ –

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

彼らは共通の場所を共有する場合は、使用して検討するかもしれませんさまざまなディレクトリスキャンアプローチの1つ(opendirまたはglob、名前2)。

あなたはファイル名のリストを持っていたらあなたが辞書を読むことができ、:それと

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

ありがとう、@オースティンヘイスティングス。それはまさに私が探しているものです。とても役に立ちました! –

関連する問題