Domanda

hh=[[82.5], [168.5]]
N=1./5
ll=N*hh

Quello che sto facendo di sbagliato? Ho ricevuto l'errore:

"sequenza non può moltiplicare per non int di Tipo 'float' "

cerco di aggiungere galleggiante (), ma questo non è risolvere il mio problema;

Ho bisogno di moltiplicare ogni elemento in ordine di ... grazie a tutti


** Ok grazie per idea per numero * array, ma come matrice di moltiplicare * array, ho provato stesso numero * array, ma hanno problemi:

EDIT 2: **

hh=[[82.5], [168.5]]
N=zip(*hh)
ll = [[x*N for x in y] for y in hh]

???

È stato utile?

Soluzione

Quando si moltiplicano una sequenza X in Python, esso non si moltiplica ogni membro della sequenza - ciò che fa è quello di ripetere i tempi di sequenza X. È per questo che X deve essere un numero intero (non può essere un float).

Che cosa si vuole fare è quello di utilizzare un elenco di comprensione:

hh = [[82.5], [168.5]]
N  = 1.0 / 5
ll = [[x*N for x in y] for y in hh]

Altri suggerimenti

Bene in Python si può fare questo:

>>> [2] * 3
[2, 2, 2]

Questo richiede un tipo int.

Quello che state cercando è qualcosa di un parente map o un elenco di comprensione.

>>> list(map(lambda x: x * 2, [2, 2]))
[4, 4]
>>> [x * 2 for x in [2, 2]]
[4, 4]

Si può anche generatore di comprensione per farlo pigramente.

(x * 2 for x in [2, 2])

In alternativa si può fare un po 'Haskellish (anche se senza l'eleganza):

>>> import operator
>>> from functools import partial, reduce
>>> add = partial(operator.mul, 2)
>>> list(map(add, [2,2]))
[4, 4]

È anche possibile utilizzare il numpy array per moltiplicare i numeri nella matrice.

>>> hh = numpy.asarray([[82.5], [168.5]])
>>> N = 1.0/5
>>> ll = N*hh
>>> ll
array([[ 16.5],
       [ 33.7]])
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top