Python 数组相乘
hh=[[82.5], [168.5]]
N=1./5
ll=N*hh
我哪里做错了?我收到了这个错误:
"不能用非整数的浮点数来乘以序列"
我尝试使用float(),但这并没有解决我的问题;
我需要把数组中的每个元素都乘起来……谢谢大家
**好的,谢谢你们关于数字乘以数组的建议,但我该如何把数组乘以数组呢?我尝试了和数字乘以数组一样的方法,但遇到了问题:
编辑 2:**
hh=[[82.5], [168.5]]
N=zip(*hh)
ll = [[x*N for x in y] for y in hh]
???
3 个回答
6
你也可以使用numpy
这个库里的数组来对数组中的数字进行相乘。
>>> hh = numpy.asarray([[82.5], [168.5]])
>>> N = 1.0/5
>>> ll = N*hh
>>> ll
array([[ 16.5],
[ 33.7]])
8
在Python中,你可以这样做:
>>> [2] * 3
[2, 2, 2]
这需要一个整数类型。
你想要的东西类似于 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])
或者你可以用一种有点像Haskell的方式来做(虽然没有那么优雅):
>>> import operator
>>> from functools import partial, reduce
>>> add = partial(operator.mul, 2)
>>> list(map(add, [2,2]))
[4, 4]
21
在Python中,当你用一个数字X
去乘一个序列时,它并不是把序列里的每个元素都乘以这个数字,而是把整个序列重复X
次。这就是为什么X
必须是一个整数(不能是小数)的原因。
如果你想要实现其他的操作,可以使用列表推导式:
hh = [[82.5], [168.5]]
N = 1.0 / 5
ll = [[x*N for x in y] for y in hh]