hh=[[82.5], [168.5]]
N=1./5
ll=N*hh
我做错了什么?我收到了错误:
“不能将序列乘以非int 输入'float'“
我尝试添加float(),但这不能解决我的问题;
我需要将数组中的每个元素相乘... 感谢所有
hh=[[82.5], [168.5]]
N=zip(*hh)
ll = [[x*N for x in y] for y in hh]
???
答案 0 :(得分:12)
当你在Python中将序列乘以X
时,它不会将序列的每个成员相乘 - 它的作用是重复序列X
次。这就是为什么X必须是一个整数(它不能是一个浮点数)。
你想要做的是使用列表理解:
hh = [[82.5], [168.5]]
N = 1.0 / 5
ll = [[x*N for x in y] for y in hh]
答案 1 :(得分:6)
在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])
或者你可以做一点Haskellish(尽管没有优雅):
>>> import operator
>>> from functools import partial, reduce
>>> add = partial(operator.mul, 2)
>>> list(map(add, [2,2]))
[4, 4]
答案 2 :(得分:5)
您还可以使用numpy
数组乘以数组中的数字。
>>> hh = numpy.asarray([[82.5], [168.5]])
>>> N = 1.0/5
>>> ll = N*hh
>>> ll
array([[ 16.5],
[ 33.7]])