Es ist eine Python3-Serie. Im Folgenden ist "int" also eine multiplizierte ganze Zahl.
Wir führen ein Bitboard ein, um den zuvor geschriebenen Umkehrartikel weiter zu bewerben. Da 8x8 = 64 Quadrate ist, wird es in 64 Bit ausgedrückt.
Ich wollte zufällig eine aus der "int" -Liste auswählen und eine Bitoperation mit der Karte ausführen, also schrieb ich im Allgemeinen den folgenden Code.
In [2]: array = [1, 2, 3]
In [3]: board = 0xfffffffffffffff
In [4]: np.random.choice(array) & board
Out[4]: 2
Einer wird mit numpy.random.choice
aus der Liste entfernt und eine Bitoperation ausgeführt.
Haben Sie übrigens bemerkt, dass die Variable "board" nur 15 fs verwendet, dh den Bereich, der durch 60 Bit dargestellt werden kann?
Da die Karte durch bis zu 64 Bit dargestellt wird, erhöhen Sie f um eins, um 64 Bit zu erhalten.
In [5]: array = [1, 2, 3]
In [6]: board = 0xffffffffffffffff
In [7]: np.random.choice(array) & board
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-7-cb36edc17d23> in <module>()
----> 1 np.random.choice(array) & board
TypeError: ufunc 'bitwise_and' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
Es scheint, dass ein Fehler auftritt, wenn die Anzahl der Bits von "Karte" 64 beträgt.
Werfen wir einen Blick auf die Art dessen, was in np.random.choice
erscheint.
In [36]: type(np.random.choice(array))
Out[36]: numpy.int64
array
ist eine Liste von int
, kommt aber als numpy.int64
heraus!
Es scheint, dass numpy.int64
und 64bit int
keine Bitoperationen ausführen können.
In [49]: np.int64(1) & board
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-49-3927f8b2d3d4> in <module>()
----> 1 np.int64(1) & board
TypeError: ufunc 'bitwise_and' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
Übrigens, als ich es überprüft habe, scheint es nicht möglich zu sein, ** auf 64-Bit int
zu beschränken. was ist das.
In [24]: board = 0b111111111111111111111111111111111111111111111111111111111111111 # 63bit
In [25]: np.random.choice(array) & board
Out[25]: 1
In [26]: board = 0b1111111111111111111111111111111111111111111111111111111111111111 # 64bit
In [27]: np.random.choice(array) & board---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-27-cb36edc17d23> in <module>()
----> 1 np.random.choice(array) & board
TypeError: ufunc 'bitwise_and' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
In [28]: board = 0b11111111111111111111111111111111111111111111111111111111111111111 # 65bit
In [29]: np.random.choice(array) & board
Out[29]: 3
Obwohl "Casting" irgendwie geschrieben ist, war das 63-Bit-Operationsergebnis "numpy.int64" und das 65-Bit-Operationsergebnis "int", daher weiß ich nicht, in was die 64-Bit-Grenze umgewandelt werden soll. Ist das so?
Da numpy.int64
und 64bit int
nicht bitberechnet werden können, scheint es gut, in numpy.uint64
umzuwandeln.
In [55]: np.uint64(np.random.choice(array)) & board
Out[55]: 1
Vielleicht sogar negative Zahlen.
In [24]: np.uint64(-1)
Out[24]: 18446744073709551615
In Anbetracht des ursprünglichen Board-Typs würde ich ihn gerne in "int" umwandeln, aber ich mache mir keine Sorgen über die Bit-Operation negativer Zahlen. Bei mehreren ganzen Zahlen bin ich mir nicht sicher.
Erstens ändert sich auch der Rückgabetyp von "np.random.choice" je nach Inhalt.
In [13]: type(np.random.choice([1]))
Out[13]: numpy.int64
In [14]: type(np.random.choice([1<<63]))
Out[14]: numpy.uint64
In [15]: type(np.random.choice([1<<64]))
Out[15]: int
Zu gruselig
Recommended Posts