C'est une série Python3. Donc, dans ce qui suit, ʻint` est un entier multiplié.
Nous introduisons un petit tableau pour promouvoir davantage l'article de reversi que j'ai écrit plus tôt. Puisque 8x8 = 64 carrés, il est exprimé en 64 bits.
Je voulais en sélectionner un au hasard dans la liste de ʻint` et effectuer une opération de bit avec la carte, j'ai donc écrit le code suivant.
In [2]: array = [1, 2, 3]
In [3]: board = 0xfffffffffffffff
In [4]: np.random.choice(array) & board
Out[4]: 2
L'un est retiré de la liste avec numpy.random.choice
et l'opération sur les bits est effectuée.
Au fait, avez-vous remarqué que la variable «board» n'utilise que 15 fs, c'est-à-dire la plage qui peut être représentée par 60 bits?
Puisque la carte est représentée par jusqu'à 64 bits, essayez d'augmenter f par un pour en faire 64 bits.
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''
Il semble qu'une erreur se produise si le nombre de bits de «board» est de 64.
Jetons un coup d'oeil au type de ce qui apparaît dans np.random.choice
.
In [36]: type(np.random.choice(array))
Out[36]: numpy.int64
ʻArray est une liste de ʻint
, mais elle se présente sous la forme numpy.int64
!
Il semble que numpy.int64
et 64bit ʻint` ne peuvent pas effectuer d'opérations sur les bits.
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''
Au fait, quand je l'ai vérifié, il semble qu'il n'est pas possible de ** limiter ** à ʻint` 64 bits. Qu'est-ce que c'est.
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
Bien que «casting» soit en quelque sorte écrit, le résultat de l'opération 63 bits était «numpy.int64», et le résultat de l'opération 65 bits était «int », donc je ne sais pas vers quoi transtyper la limite 64 bits. Est-ce vrai?
Puisque numpy.int64
et 64bit ʻint ne peuvent pas être opérés sur les bits, il semble bon de convertir en
numpy.uint64`.
In [55]: np.uint64(np.random.choice(array)) & board
Out[55]: 1
Peut-être même des nombres négatifs.
In [24]: np.uint64(-1)
Out[24]: 18446744073709551615
Compte tenu du type de carte d'origine, je voudrais le convertir en «int», mais je ne suis pas inquiet du fonctionnement des bits des nombres négatifs. Je ne suis pas sûr de plusieurs entiers.
En premier lieu, le type de retour de np.random.choice
change également en fonction du contenu.
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
Trop effrayant
Recommended Posts