Dies ist nicht so ein Problem wie eine Kuriosität.Warum gibt es zwei np.int64s in numpy.core.numeric._typelessdata (Warum ist numpy.int64 nicht numpy.int64?)
In meinem Dolmetscher auf 64-Bit-Linux kann ich
In [10]: np.int64 == np.int64
Out[10]: True
In [11]: np.int64 is np.int64
Out[11]: True
Große ausführen, was nur ich erwarten würde. Allerdings fand ich diese seltsame Eigenschaft des numpy.core.numeric Modul
In [19]: from numpy.core.numeric import _typelessdata
In [20]: _typelessdata
Out[20]: [numpy.int64, numpy.float64, numpy.complex128, numpy.int64]
Sonderbare warum numpy.int64 dort doppelt so groß ist? Lass uns untersuchen.
In [23]: _typelessdata[0] is _typelessdata[-1]
Out[23]: False
In [24]: _typelessdata[0] == _typelessdata[-1]
Out[24]: False
In [25]: id(_typelessdata[-1])
Out[25]: 139990931572128
In [26]: id(_typelessdata[0])
Out[26]: 139990931572544
In [27]: _typelessdata[-1]
Out[27]: numpy.int64
In [28]: _typelessdata[0]
Out[28]: numpy.int64
Whoah sind sie unterschiedlich. Was geht hier vor sich? Warum gibt es zwei np.int64's?
Der Grund, warum ich darauf gestoßen bin, ist, weil ich immer wollte, dass der dtype für meine numply Strings ausgedruckt wird. Ich konnte kein Flag dafür finden, also habe ich array_repr etwas modifiziert, um ein 'force_dtype = False Flag' zu erhalten. Und dann habe ich den Check auf 'if skipdtype und nicht force_dtype:' geändert. Gibt es einen Grund, warum systemeigene Typen nicht in der Zeichenfolgendarstellung enthalten sein sollten? Ist ein Int64 wirklich anders als ein LongLong auf meinem System? Auch warum ist repr (np.longlong) = "" um mit zu beginnen? –
Erotemic
Ich denke, dass das Auslassen des 'dtype' aus der Zeichenfolgendarstellung von Arrays, die native Typen enthielten, wahrscheinlich nur eine stilistische Option war, um konsistent mit der Darstellung nativer Python-Skalare zu sein. Ich kann mir keine wichtigen Unterschiede zwischen einem 'np.int64' und einem' np.longlong' auf Ihrem System vorstellen, aber wie Joe erwähnte, könnte der C-Compiler auf einem anderen System ein 'long long' als etwas breiteres als 64Bits definieren , also sind die beiden Typen nicht immer unbedingt austauschbar. –
Vermutlich gibt 'repr (np.longlong) == "" 'die Tatsache wieder, dass (zumindest auf Ihrem System) diese beiden Typen effektiv gleich sind. –