web-dev-qa-db-fra.com

Multiplier les tableaux numpy int et float: impossible de convertir ufunc en multipliant la sortie à partir de dtype

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'

15
Basj

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')
13
makis

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
3
Nickil Maveli
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

2
Ahmet İlgin