C sprachähnliche Struktur in Python

Einführung

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];

Ausdrucksmethode in Python

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.

Verwendung von ① (Ausgabe vorerst)

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.])]

Verwendung von ② (Typ, Form)

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.]

Verwendung von ③ (np.recarray)

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.]

Nutzungsprüfung ④ (Zuweisungsprozess)

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

C sprachähnliche Struktur in Python
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
Python interne Struktur
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Ausgabebaumstruktur von Dateien in Python
Täglicher AtCoder # 36 mit Python
Clustertext in Python
Täglicher AtCoder # 32 in Python
Täglicher AtCoder # 6 in Python
Täglicher AtCoder # 18 in Python
Bearbeiten Sie Schriftarten in Python
Singleton-Muster in Python
Dateioperationen in Python
Lesen Sie DXF mit Python
Täglicher AtCoder # 53 in Python
Tastenanschlag in Python
Verwenden Sie config.ini mit Python
Löse ABC168D in Python
Täglicher AtCoder # 7 in Python
LU-Zerlegung in Python
Ein Liner in Python