2009-11-05 5 views
0

Je souhaite convertir un tableau num64 intx en un tableau numpt uint64, en ajoutant 2 ** 63 aux valeurs du processus afin qu'elles soient toujours dans la plage valide autorisée par les tableaux. Ainsi, par exemple, si je pars deConvertir int64 en uint64

a = np.array([-2**63,2**63-1], dtype=np.int64) 

Je veux finir avec

np.array([0.,2**64], dtype=np.uint64) 

Cela paraît simple au début, mais comment voulez-vous faire réellement?

Répondre

1

Je ne suis pas un vrai expert en numpy, mais ceci:

>>> a = np.array([-2**63,2**63-1], dtype=np.int64) 
>>> b = np.array([x+2**63 for x in a], dtype=np.uint64) 
>>> b 
array([     0, 18446744073709551615], dtype=uint64) 

fonctionne pour moi avec Python 2.6 et 1.3.0 numpy

Je suppose que vous vouliez dire 2**64-1, pas 2**64, dans votre prévu sortie, puisque 2**64 ne rentre pas dans un uint64. (18446744073709551615 est 2**64-1)

2

Utilisation astype():

(a+2**63).astype(uint64) 
# array([     0, 18446744073709551615], dtype=uint64)