SciPy Matlab 配列
NumPy は Python が読み取り可能な形式でデータを保存する方法を提供します。
SciPy は Matlab との対話方法を提供します。
SciPy の scipy.io モジュールは、Matlab の配列を処理するための多くの関数を提供します。
Matlab 形式でデータをエクスポートする
savemat()このメソッドは Matlab 形式のデータをエクスポートできます。
このメソッドのパラメータは次のとおりです。- filename- データを保存するファイル名。
- mdict- データを含む辞書。
- do_compression- 結果データを圧縮するかどうかを指定するブール値。デフォルトは False です。
配列を変数 "vec" として mat ファイルにエクスポートします。
例
from scipy import io
import numpy as np
arr = np.arange(10)
io.savemat('arr.mat', {"vec": arr})
import numpy as np
arr = np.arange(10)
io.savemat('arr.mat', {"vec": arr})
注意:上記のコードは、コンピュータ上に "arr.mat" という名前のファイルを保存します。
Matlab 形式のデータをインポートする
loadmat() メソッドは Matlab 形式のデータをインポートできます。
このメソッドのパラメータ:
- filename- データを保存するファイル名。
構造化配列を返します。そのキーは変数名で、対応する値は変数の値です。
次の例は mat ファイルから配列をインポートします。
例
from scipy import io
import numpy as np
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9,])
# エクスポート
io.savemat('arr.mat', {"vec": arr})
# インポート
mydata = io.loadmat('arr.mat')
print(mydata)
import numpy as np
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9,])
# エクスポート
io.savemat('arr.mat', {"vec": arr})
# インポート
mydata = io.loadmat('arr.mat')
print(mydata)
返される結果は次のとおりです。
{
'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Tue Sep 22 13:12:32 2020',
'__version__': '1.0',
'__globals__': [],
'vec': array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
}変数名 "vec" を使用して、matlab データの配列のみを表示します。例
from scipy import io
import numpy as np
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9,])
# エクスポート
io.savemat('arr.mat', {"vec": arr})
# インポート
mydata = io.loadmat('arr.mat')
print(mydata['vec'])
import numpy as np
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9,])
# エクスポート
io.savemat('arr.mat', {"vec": arr})
# インポート
mydata = io.loadmat('arr.mat')
print(mydata['vec'])
返される結果は次のとおりです。
[[0 1 2 3 4 5 6 7 8 9]]
結果からわかるように、配列は最初は1次元ですが、抽出時に次元が1つ増えて2次元配列になります。
この問題を解決するには、追加のパラメータを渡します。squeeze_me=True:
例
from scipy import io
import numpy as np
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9,])
# エクスポート
io.savemat('arr.mat', {"vec": arr})
# インポート
mydata = io.loadmat('arr.mat', squeeze_me=True)
print(mydata['vec'])
import numpy as np
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9,])
# エクスポート
io.savemat('arr.mat', {"vec": arr})
# インポート
mydata = io.loadmat('arr.mat', squeeze_me=True)
print(mydata['vec'])
返される結果は次のとおりです。
[0 1 2 3 4 5 6 7 8 9]その他の拡張