numpy Array-Casting entschied nicht "sicher"

8

Indiziere ein numpy Array mit einem anderen - beide sind definiert als dtype = 'uint32'. Mit numpy.take indexieren Sie einen unsicheren Casting-Fehler. Das ist vorher noch nicht aufgefallen. Irgendeine Idee was ist los?

%Vor%     
Henry Thornton 04.03.2015, 11:51
quelle

1 Antwort

7

Dies ist durchaus üblich, wenn NumPy-Funktionen verwendet werden, für die Indizes oder Längen angegeben werden müssen (nicht nur take , siehe zum Beispiel hier ).

Das Problem besteht darin, dass NumPy zu Indexierungszwecken Ihr uint32 -Array als int32 -Array behandeln möchte (was wahrscheinlich der Integer-Typ "Zeiger" auf Ihrem 32-Bit-System ist, np.intp ) und möchte es auf diesen Typ umwandeln.

Dies kann nicht sicher durchgeführt werden - einige Ganzzahlen in einem Array ohne Vorzeichen sind möglicherweise nicht als 32-Bit-Ganzzahl mit Vorzeichen darstellbar. Der Fehler, den Sie sehen, spiegelt dies wider.

Dies bedeutet, dass Sie den gleichen Fehler erhalten, wenn b dtype int64 oder einen Float dtype hat, aber nicht wenn es int32 oder eine kleinere ganze Zahl dtype ist.

Für das, was es wert ist, ist dies kein unmittelbares Problem für die Indizierungsschreibweise a[b] , die das unsichere Casting erlaubt (aber einen Fehler hervorruft, wenn der Index außerhalb der Grenzen liegt). Versuchen Sie zum Beispiel a[2**31] - NumPy konvertiert zu int32 , beklagt sich dann aber, dass der Index -2147483648 außerhalb der Grenzen liegt.

    
Alex Riley 04.03.2015, 12:35
quelle

Tags und Links