Je voudrais multiplier un int16
array mais un float
array, avec arrondi automatique, mais cela échoue:
import numpy
A = numpy.array([1, 2, 3, 4], dtype=numpy.int16)
B = numpy.array([0.5, 2.1, 3, 4], dtype=numpy.float64)
A *= B
Je reçois:
TypeError: impossible de convertir ufunc en multipliant la sortie de dtype ('float64') en dtype ('int16') avec la règle de transtypage 'same_kind'
2 façons de résoudre ce problème:
Vous pouvez résoudre ce problème en remplaçant
A *= B
avec
A = (A * B)
o avec
numpy.multiply(A, B, out=A, casting='unsafe')
Vous pouvez utiliser broadcasting
pour multiplier les deux tableaux et ne prendre que la partie entière comme suit:
In [2]: (A*B).astype(int)
Out[2]: array([ 0, 4, 9, 16])
Contraintes de synchronisation:
In [8]: %timeit (A*B).astype(int)
1000000 loops, best of 3: 1.65 µs per loop
In [9]: %timeit np.multiply(A, B, out=A, casting='unsafe')
100000 loops, best of 3: 2.01 µs per loop
import numpy as np
A = np.float_(A)
A *= B
essaye ça. Je pense que les types de tableaux différents que vous obtenez échouent.
Jeter