16 Stimmen

Python Array multiplizieren

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

Was mache ich falsch? Ich habe einen Fehler erhalten:

"kann Sequenz nicht mit Nicht-Int von multiplizieren Typ 'float'"

Ich versuche, float() hinzuzufügen, aber das ist keine Lösung für mein Problem;

Ich muss jedes Element im Array multiplizieren... Dank an alle


**Ok danke für Idee für Zahl * Array, aber wie Array*array zu multiplizieren, habe ich versucht, gleich wie Zahl*array, aber haben Probleme:

EDIT 2:**

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

???

21voto

Boaz Yaniv Punkte 6166

Wenn Sie eine Sequenz multiplizieren mit X in Python wird nicht jedes Glied der Sequenz multipliziert, sondern die Sequenz wird wiederholt X Zeiten. Aus diesem Grund muss X eine ganze Zahl sein (es kann kein Float sein).

Was Sie tun wollen, ist, ein Listenverständnis zu verwenden:

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

8voto

Skurmedel Punkte 20549

Nun, in Python können Sie dies tun:

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

Dies erfordert einen int-Typ.

Was Sie suchen, ist etwas Ähnliches wie die map oder ein Listenverständnis.

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

Sie können das Generatorverständnis auch auf die leichte Schulter nehmen.

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

Oder Sie können es ein bisschen wie in Haskell machen (wenn auch ohne die Eleganz):

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

6voto

SiggyF Punkte 20140

Sie können auch die numpy Array zur Multiplikation der Zahlen im Array.

>>> hh = numpy.asarray([[82.5], [168.5]])
>>> N = 1.0/5
>>> ll = N*hh
>>> ll
array([[ 16.5],
       [ 33.7]])

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X