Python 乘法运算两个数组

0 投票
4 回答
14342 浏览
提问于 2025-04-16 16:37

这是接着之前的讨论继续的内容:

我需要进行数组与数组之间的乘法。我不想使用“numpy”。在之前的讨论中,我学会了如何进行数字与数组的乘法:

数字 * 数组:

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

但是我该如何进行数组 * 数组的乘法呢: ->矩阵乘法。

hh=[[82.5], [168.5]]
N=zip(*hh)                                        -> N must be transpose of hh!!!!!
ll = [[[x*z for x in y] for y in hh] for z in N]

? 谢谢


编辑:

输入:

hh=[[82.5], [168.5]]
N=zip(*hh)                            #N=[(82.5, 168.5)]

想要的输出:hh*N

[[  6806.25  13901.25]
 [ 13901.25  28392.25]]

4 个回答

3

你的想法是对的,不过可以把它写得简单一点:

list_a = [1,2,3,4,5] # or hh[0]
list_b = [6,7,8,9,0] # or hh[1]
multiplied = [a * b for a, b in zip(list_a, list_b)]

另外,如果你希望 / 这个运算符返回浮点数(小数),可以在你的代码最上面加上 from __future__ import division

3

你可以使用列表推导式,就像你之前提到的数字和数组的问题一样。

假设你有两个数组:

a = [1,2,3]
b = [4,5,6]

首先,你可以用zip把它们组合起来,这样就能得到你想要相乘的配对:

pairs = zip(a,b)

这样会得到[(1, 4), (2, 5), (3, 6)]

你可以这样“拆开”一个元组:

val1, val2 = (1,4) # val1=1 and val2=4

把所有东西结合在一起,这样就可以把数组ab相乘:

c = [val1*val2 for val1,val2 in zip(a,b)]

在你上面的例子中,hh是一个包含你两个数组的数组,结果就变成:

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

使用 operator.mul 和 map 函数。

from operator import mul
map(mul, list1, list2)

这是一个 N*hh 的矩阵,其中 N=zip(**hh)。

>>> hh = [[82.5], [168.5]]
>>> [ [i*j for i in x for j in y] for x in hh for y in zip(*hh) ]
[[6806.25, 13901.25], [13901.25, 28392.25]]

>>> hh = [[2], [4]]
>>> [ [i*j for i in x for j in y] for x in hh for y in zip(*hh) ]
[[4, 8], [8, 16]]

>>> hh = [[2], [4], [6]]
>>> [ [i*j for i in x for j in y] for x in hh for y in zip(*hh) ]
[[4, 8, 12], [8, 16, 24], [12, 24, 36]]

>>> hh = [[1, 2, 4]]
>>> [ [i*j for i in x for j in y] for x in hh for y in zip(*hh) ]
[[1, 2, 4], [2, 4, 8], [4, 8, 16]]

>>> hh = [[1, 2], [3, 4]]
>>> [ [i*j for i in x for j in y] for x in hh for y in zip(*hh) ]
[[1, 3, 2, 6], [2, 4, 4, 8], [3, 9, 4, 12], [6, 12, 8, 16]]

如果你想了解其他内容,这里还有几个例子可以帮助你入门:

>>> a = [1, 2, 3]
>>> b = [0, 1, 2]
>>> [ x*y for x in a for y in b]
[0, 1, 2, 0, 2, 4, 0, 3, 6]
>>> [[x*y for x in a] for y in b]
[[0, 0, 0], [1, 2, 3], [2, 4, 6]]

撰写回答