列表和列表的乘法

时间:2018-12-24 20:30:00

标签: python list matrix-multiplication

在数学上,我正在尝试进行xij * yi乘法。在Python中,我需要按如下所示将x和y列表相乘:

x = [[1,2,3],[4,5,6],[7,8,9]]
y = [10,100,1000]

xy = [[] for i in range(3)]

for i in range(3):
   for j in range(3):
       xy[i][j] += [y[i] * x[i][j]]

但是,当我期望输出如下时,出现“列表索引超出范围”错误:

xy = [[10, 20, 30],[400, 500, 600],[7000, 8000, 9000]]

你能帮忙吗?

4 个答案:

答案 0 :(得分:4)

您非常亲密。问题是您使用双索引[i][j]来引用嵌套列表。您只需要使用索引i。您代码的其余部分都很好。

x = [[1,2,3],[4,5,6],[7,8,9]]
y = [10,100,1000]

xy = [[] for i in range(3)]

for i in range(3):
    for j in range(3):
        xy[i] += [y[i] * x[i][j]]

# [[10, 20, 30], [400, 500, 600], [7000, 8000, 9000]]

替代是使用append

for i in range(3):
    for j in range(3):
        xy[i].append(y[i] * x[i][j])

使用NumPy的替代方式

import numpy as n
x = np.array([[1,2,3],[4,5,6],[7,8,9]])
y = np.array([10,100,1000])
xy = (x.T*y).T

答案 1 :(得分:0)

我认为这将解决问题,

x = [[1,2,3],[4,5,6],[7,8,9]] 
y = [10,100,1000]
xy = []
for i in range(3):
    xy.append([])
    for j in range(3):
        xy[i].append(y[i]*x[i][j])
print (xy)

在python中,使用“ list.append()”将值添加到列表中。

答案 2 :(得分:0)

让我们使用numpy库的multiply()函数借助列表推导来解决此问题-

import numpy as np
list([np.multiply(x[i],y[i]).tolist() for i in range(len(y))])
    [[10, 20, 30], [400, 500, 600], [7000, 8000, 9000]]

答案 3 :(得分:0)

只是简单的列表理解:

x = [[1,2,3],[4,5,6],[7,8,9]]
y = [10,100,1000]

xy = [[y[i] * j for j in lst] for i, lst in enumerate(x)]
print(xy)

输出:

[[10, 20, 30], [400, 500, 600], [7000, 8000, 9000]]