Wenn ich auf diese Weise ein Recarray erstelle:
In [29]: np.rec.fromrecords([(1,'hello'),(2,'world')],names=['a','b'])
Das Ergebnis sieht gut aus:
Out[29]:
rec.array([(1, 'hello'), (2, 'world')],
dtype=[('a', '<i8'), ('b', '|S5')])
Aber wenn ich die Datentypen angeben möchte:
In [32]: np.rec.fromrecords([(1,'hello'),(2,'world')],dtype=[('a',np.int8),('b',np.str)])
Die Zeichenfolge wird auf eine Länge von Null gesetzt:
Out[32]:
rec.array([(1, ''), (2, '')],
dtype=[('a', '|i1'), ('b', '|S0')])
Ich muss Datentypen für alle numerischen Typen angeben, da ich mich um int8/16/32 usw. kümmere, aber ich möchte von der automatischen Erkennung der Zeichenfolgenlänge profitieren, die funktioniert, wenn ich keine Datentypen angebe. Ich habe versucht, np.str durch None zu ersetzen, aber ohne Erfolg. Ich weiß, dass ich zum Beispiel '|S5' angeben kann, aber ich weiß nicht im Voraus, was die Stringlänge eingestellt werden sollte.