web-dev-qa-db-ja.com

Python配列乗算

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

私が間違っているのは何ですか?エラーが発生しました:

「シーケンスに「float」型の非整数を乗算することはできません」

Float()を追加しようとしましたが、これで問題が解決しません。

配列内の各要素を乗算する必要があります...すべてのおかげで


** number * arrayのアイデアに感謝しますが、array * arrayを乗算する方法は、number * arrayと同じように試しましたが、問題があります。

編集2:**

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

???

11
thaking

PythonでシーケンスにXを掛けても、シーケンスの各メンバーは掛けられません。つまり、シーケンスをX回繰り返すということです。そのため、Xは整数である必要があります(浮動小数点数にすることはできません)。

あなたがしたいことはリスト内包を使用することです:

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

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]
6
Skurmedel

numpy 配列を使用して、配列内の数値を乗算することもできます。

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