/ / PythonでMatlab構造体を作成する - python、matlab、matlab-struct

PythonでMatlabの構造体を作成する - python、matlab、matlab-struct

私は問題があります: 私はPythonで構造体のようなMatlabを作成したいです。私が作成する必要がある構造体は2つのフィールドがあります: "val"と "sl"。 1×2の構造体でなければなりません。 「val」フィールドは、内部に2つの3×3行列(例えば、AとB)を有する必要があるが、「sl」フィールドは、内部に2つの値(例えば137と159)を有する必要がある。 最後の構造体は次のようになります。

val    sl
3x3   137
3x3   159

Matlabでは、コードは次のとおりです。 struct(1).val=A;struct(1).sl=137;struct(2).val=B;struct(2).sl=159 Pythonで私は "試した hval = fromarrays([[A, B], [137, 159]], names=["val", "sl"]) しかし、それは私にこのエラーを与えます: fromarraysの "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/records.py"、608行 ValueError( "配列%dの配列形状の不一致"%k)を発生させます

ValueError:配列1の配列形状が一致しません 誰もがこの問題を解決する方法を知っていますか?

回答:

回答№1は1

保存できるように見えません ndarray フィールドが必要とするように、レコードの要素として同じ寸法です。 valフィールドに3 x 3の配列を追加すると、離散配列として格納されるのではなく、そのフィールドの大きさが2 x 3 x 3になります。

しかし、Pythonを使って同じ種類の構造をエミュレートすることができます。 dict そして list 以下のようにタイプします。

struct = {
"val": [A, B],
"sl": [137, 138]
}

これで、これらの要素に次のようにアクセスできます(引数の順序は異なります)

struct["val"][0] # = A
struct["sl"][1] # 138

順序を維持するには、辞書/リスト構造を逆にします。

struct = [
{"val": A, "sl": B},
{"val": 137, "sl": 138},
]

struct[0]["val"]  # A
struct[1]["sl"] # 138