2

問題があります: Python で Matlab のような構造体を作成したいです。作成する必要がある構造体には、「val」と「sl」の 2 つのフィールドがあります。1x2 構造体でなければなりません。「val」フィールドには 2 つの 3x3 マトリックス (例: 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'])エラーが表示されます: File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/ core/records.py"、608 行目、fromarrays raise ValueError("array-shape mismatch in array %d" % k)

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

4

1 に答える 1

1

ndarrayフィールドは同じ次元である必要があるため、レコードの要素として保存できるようには見えません。3x3 配列を val フィールドに追加すると、個別の配列として格納されるのではなく、そのフィールドの次元が 2x3x3 になるように見えます。

dictただし、次のように Pythonとlist型を使用して、同じ種類の構造をエミュレートできます。

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

これらの要素に次のようにアクセスできるようになりました (引数の順序が異なることに注意してください)。

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

順序を維持するには、dict/list 構造を逆にします。

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

struct[0]['val']  # A
struct[1]['sl'] # 138
于 2016-01-07T13:20:45.477 に答える