0

.mat使用してロードするファイルがありますscipy:

from oct2py import octave
import scipy.io as spio
matPath = "path/to/file.mat"
matFile = spio.loadmat(matPath)

oct2pyそのように、を使用してオクターブ関数に渡したいnumpy配列を取得します。

aMatStruct = matFile["aMatStruct"]
result = octave.aMatFunction(aMatStruct)

しかし、次のエラーが表示されます。

oct2py.utils.Oct2PyError: Datatype not supported

dtype次のようなarray が原因のようです。[('x', 'O'), ('y', 'O'), ('z', 'O')]

'S''U'、またはサポートされているものに変更することを考えました。

  1. どうすればそれができますか?
  2. サポートされている dtype がotc2py ドキュメントに見つかりませんでした。それについて何か助けはありますか?
  3. .mat別の (サポートされている) dtype でファイルをロードする方法はありますか? ここを見ましたが、役に立つものは見つかりませんでした。

aMatFunction内部ではaMatStruct次のように使用されていることに注意してくださいx = aMatStruct.x

4

2 に答える 2

0

結果の配列を有効な辞書に変換することを提案するつもりでしたが、あなたは私を打ち負かしたので、コーディングしません:p

ただし、私が提案しようとしていたもう 1 つのより単純な解決策は、構造体をオクターブ内でしか使用していないため、構造体をそのワークスペースにロードして直接評価することですつまり、次のように動作します。

>>> octave.load("MyFile.mat")
>>> octave.eval("fieldnames(S)")
ans = 
{
  [1,1] = name
  [2,1] = age
}
[u'name', u'age']

編集して、それをねじ込みます。これがpythonソリューションです。とにかく始めました:p

>>> from oct2py import octave
>>> from scipy.io import loadmat
>>> F = loadmat("/home/tasos/Desktop/MyFile.mat")
>>> M = F["S"] # the name of the struct variable I saved in the mat file
>>> M = M[0][0]
>>> D = {M.dtype.names[i]:M[i][0] for i in range(len(M))}
>>> out = octave.fieldnames(D); out
[u'age', u'name']
于 2016-09-08T09:21:16.647 に答える