在数学上,我正在尝试进行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]]
你能帮忙吗?
答案 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]]