Eine Technik, die verwendet werden kann, wenn Sie in Qual sind und eine C-sprachähnliche Struktur in Python verwenden möchten. Zum Beispiel, wenn Sie eine Struktur wie ↓ erstellen möchten.
c_struct.h
typedef struct{
float pos[4];
unsigned char class;
float score;
} HOGE;
HOGE fuga[10];
Verwenden Sie strukturierte Datentypen
c_like_struct.py
import numpy as np
HOGE = np.dtype([("pos", np.float32, (4,)),
("class", np.uint8, (1,)),
("score", np.float32, (1,)),
],
align=True
)
fuga = np.zeros(10, dtype=HOGE)
Damit kann eine C-sprachähnliche Struktur ausgedrückt werden. Das Auffüllen erfolgt durch Setzen von align = True oben.
wird bearbeitet
print(HOGE)
print(fuga)
Ergebnis
{'names':['pos','class','score'], 'formats':[('<f4', (4,)),('u1', (1,)),('<f4', (1,))], 'offsets':[0,16,20], 'itemsize':24, 'aligned':True}
[([0., 0., 0., 0.], [0], [0.]) ([0., 0., 0., 0.], [0], [0.])
([0., 0., 0., 0.], [0], [0.]) ([0., 0., 0., 0.], [0], [0.])
([0., 0., 0., 0.], [0], [0.]) ([0., 0., 0., 0.], [0], [0.])
([0., 0., 0., 0.], [0], [0.]) ([0., 0., 0., 0.], [0], [0.])
([0., 0., 0., 0.], [0], [0.]) ([0., 0., 0., 0.], [0], [0.])]
wird bearbeitet
print("fuga.dtype: ",fuga.dtype)
print("fuga.shape: ",fuga.shape)
print("fuga.['pos'].shape: ",fuga['pos'].shape)
print("fuga.['pos'][0].shape: ",fuga['pos'][0].shape)
print("fuga['pos'][1]: ", fuga['pos'][1])
Ergebnis
fuga.dtype: {'names':['pos','class','score'], 'formats':[('<f4', (4,)),('u1', (1,)),('<f4', (1,))], 'offsets':[0,16,20], 'itemsize':24, 'aligned':True}
fuga.shape: (10,)
fuga['pos'].shape: (10, 4)
fuga['pos'][0].shape: (4,)
fuga['pos'][1]: [0. 0. 0. 0.]
wird bearbeitet
piyo = fuga.view(np.recarray)
print("piyo: ", piyo)
print("piyo.pos.shape: ", piyo.pos.shape)
print("piyo.pos[0].shape: ", piyo.pos[0].shape)
print("piyo.pos[1]: ",piyo.pos[1])
Ergebnis
piyo: [([0., 0., 0., 0.], [0], [0.]) ([0., 0., 0., 0.], [0], [0.])
([0., 0., 0., 0.], [0], [0.]) ([0., 0., 0., 0.], [0], [0.])
([0., 0., 0., 0.], [0], [0.]) ([0., 0., 0., 0.], [0], [0.])
([0., 0., 0., 0.], [0], [0.]) ([0., 0., 0., 0.], [0], [0.])
([0., 0., 0., 0.], [0], [0.]) ([0., 0., 0., 0.], [0], [0.])]
piyo.pos.shape: (10, 4)
piyo.pos[0].shape: (4,)
piyo.pos[1]: [0. 0. 0. 0.]
wird bearbeitet
fuga['pos'][1] = [-1.0 , 2.3, 0.42, 0.0]
print("fuga['pos'][:3]: ",fuga['pos'][:3])
Ergebnis
fuga['pos'][:3]: [[ 0. 0. 0. 0. ]
[-1. 2.3 0.42 0. ]
[ 0. 0. 0. 0. ]]
Recommended Posts