Умножение массива Python - PullRequest
       4

Умножение массива Python

10 голосов
/ 29 апреля 2011
hh=[[82.5], [168.5]]
N=1./5
ll=N*hh

Что я делаю не так?Я получил ошибку:

"невозможно умножить последовательность на не-int типа 'float' '

Я пытаюсь добавить float (), но это не такрешить мою проблему;

Мне нужно умножить каждый элемент в массиве ... спасибо всем


** Хорошо, спасибо за идею для массива чисел *, но как умножить массив *массив, я пробовал так же, как число * массив, но есть проблемы:

РЕДАКТИРОВАТЬ 2: **

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

???

Ответы [ 3 ]

12 голосов
/ 29 апреля 2011

Когда вы умножаете последовательность на X в Python, он не умножает каждый член последовательности - он повторяет последовательность X раз.Вот почему X должен быть целым числом (это не может быть число с плавающей точкой).

Что вы хотите сделать, это использовать понимание списка:

hh = [[82.5], [168.5]]
N  = 1.0 / 5
ll = [[x*N for x in y] for y in hh]
6 голосов
/ 29 апреля 2011

Ну, в Python вы можете сделать это:

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

Для этого требуется тип int.

То, что вы ищете, является чем-то вроде map или пониманием списка.

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

Вы также можете генерировать понимание, чтобы делать это лениво.

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

Или вы можете сделать это немного по-хаскельски (хотя и без элегантности):

>>> import operator
>>> from functools import partial, reduce
>>> add = partial(operator.mul, 2)
>>> list(map(add, [2,2]))
[4, 4]
5 голосов
/ 29 апреля 2011

Вы также можете использовать массив numpy для умножения чисел в массиве.

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