NumPy配列をMatlabに渡す方法を探しています。Numpy配列をMatlabに変換する(逆の場合)
scipy.misc.imsave
を使用して画像に配列を格納し、imread
を使用して配列をロードすることで、これを行うことができましたが、もちろん、実際の値ではなく0〜256の値が行列に含まれます。
この行列の積を256で割ったものと、元のNumPy配列の最大値を取ると正しい行列が得られますが、これはちょっと面倒です。
シンプルな方法はありますか?
NumPy配列をMatlabに渡す方法を探しています。Numpy配列をMatlabに変換する(逆の場合)
scipy.misc.imsave
を使用して画像に配列を格納し、imread
を使用して配列をロードすることで、これを行うことができましたが、もちろん、実際の値ではなく0〜256の値が行列に含まれます。
この行列の積を256で割ったものと、元のNumPy配列の最大値を取ると正しい行列が得られますが、これはちょっと面倒です。
シンプルな方法はありますか?
確かに、単なる例としてscipy.io.savemat
を使用します。
import numpy as np
import scipy.io
x = np.linspace(0, 2 * np.pi, 100)
y = np.cos(x)
scipy.io.savemat('test.mat', dict(x=x, y=y))
同様に、scipy.io.loadmat
があります。
これをload test
でmatlabに読み込みます。
@ JABでは、アスキータブ区切りのファイル(例:numpy.savetxt
)に保存することもできます。ただし、このルートに行くと、2次元に制限されます。一方、asciiは普遍的な交換形式です。ほとんどすべてが区切られたテキストファイルを扱います。
このようにnumpy配列をファイルに保存して、それを 'load( 'test.mat')'のようなものでmatlabに読み込ませることができますか? –
私は同じ問題に直面し、インタラクティブセッションからアレイを簡単にコピーして貼り付けるために次のスクリプトを書いていました。明らかに、わずかな配列のための実用的な、しかし、私は、ファイルを介して毎回/読み込みを節約するよりも、それはより便利が見つかりました:
import numpy as np, h5py
f = h5py.File('somefile.mat','r')
data = f.get('data/variable1')
data = np.array(data) # For converting to numpy array
ファイルまたは外部LIBSによってデータを渡すことなく、簡単な解決策、。
Numpyにはndarraysをlistに変換するメソッドがあり、matlabのデータ型はリストから定義できます。だから、いつのように変換することができます:
np_a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
mat_a = matlab.double(np_a.tolist())
より多くの注意が必要です。型を直接リストに変換する組み込み関数はありません。しかし、私たちは、生のデータにアクセスすることができます。したがって、reshape
(正しくフォーマットする)とtranspose
(MATLABとnumpyストアのデータが異なるため)を使用します。 ストレスを感じることは本当に重要です。主に2次元以上の行列を使用している場合は、プロジェクトでテストしてください。 MATLAB 2015aと2 dimsで動作します。
np_a = np.array(mat_a._data.tolist())
np_a = np_a.reshape(mat_a.size).transpose()
'mat_a = matlab.double(np_a.tolist())'はひどく非効率的/遅いことに注意してください。ジョーキングトンの答えは、np配列以外のものになります。 https://stackoverflow.com/a/45284125/2524427をご覧ください。 – 5Ke
Matlabはテキストファイルを解析できますか?文字列でnumlab形式の配列をフォーマットするだけで、ファイルに書き込んだ後、配列をMatlabに読み込むことができます。 – JAB
mlabwrapを検討しましたかhttp://mlabwrap.sourceforge.net/#description –
numpy/scipyで計算を完全に行うことはできませんか?ちょっと疑問に思う – Bort