[PYTHON] [Fehlergeschichte] Als ich ndarray 1 hinzufügte, änderte sich dtype unbeabsichtigt.

Annahme

Fehler bei der Entwicklung meiner erweiterten Lernbibliothek cpprb (Problem / 112))

Es handelt sich um eine Bibliothek zum vorübergehenden Speichern von Daten für Experience Replay des erweiterten Lernens. Der Datentyp wird vom Benutzer im Konstruktor und intern Numpy's ndarray angegeben. Es wurde als stabil / Referenz / generiert / numpy.ndarray.html gespeichert.

Bug (Fehler)

Als ich neulich mit einem Code wie diesem (streng anders) zu ndarray hinzufügte, änderte sich dieser unbeabsichtigt in dtype und das Verhalten wurde seltsam.

Fehler


import numpy as np

def create_buffer(shape,dtype):
    return np.zeros(shape=shape,dtype=dtype) + 1

create_buffer(1,np.bool) # array([1]) np.Es ist nicht mehr bool!! np.int64

Selbst wenn Sie numpy.add anstelle des Operators "+" verwenden, ändert sich der Ausgabetyp. (Wenn Sie die ursprüngliche Variable angeben, die einmal im Ausgabeziel out gespeichert wurde, numpy.core._exceptions.UFuncTypeError: Die Ausgabe von ufunc'add 'von dtype (' int64 ') kann mit der Casting-Regel nicht in dtype (' bool ') umgewandelt werden Ich werde wütend auf'same_kind'.)

Lösung

Durch Ersetzen des Berechnungsergebnisses für jedes Element wie unten gezeigt (nur wenn der Typ konvertiert werden kann) kann die Berechnung unter Beibehaltung des ursprünglichen Typs durchgeführt werden.

Fix


import numpy as np

def create_buffer(shape,dtype):
    a = np.zeros(shape=shape,dtype=dtype)
    a[:] = a + 1
    return a

create_buffer(1,np.bool) # array([True])

Beiseite

Es gab einen anderen Zweck, und ich habe gerade die Addition durchgeführt, und die Addition selbst hat keine Bedeutung. (Das Hinzufügen von bool ... ist nicht das Hauptthema dieses Artikels.)

Bis zuletzt die Fehlergeschichte, dass der Typ unbeabsichtigt konvertiert wurde, als die Operation auf Objektebene auf ndarray ausgeführt wurde.

Recommended Posts

[Fehlergeschichte] Als ich ndarray 1 hinzufügte, änderte sich dtype unbeabsichtigt.
Worauf ich mich beim Studium von tkinter bezog
Eine Geschichte, der ich nach der SFTP-Kommunikation mit Python verfallen war