matrice pitone moltiplicano
-
26-10-2019 - |
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]
???
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]])