列表列表与列表列表相乘

时间:2018-07-18 18:46:47

标签: python python-3.x

V = [[10,20],[40,50]]
I = [[1,2],[4,5]]
print(V*I)

**输出为:TypeError:无法将序列乘以'list'类型的非整数

**我希望输出类似V * I = [[10,40],[160,250]]

5 个答案:

答案 0 :(得分:2)

TL; DR

[[x * y for x, y in zip(i, v)] for i, v in zip(I, V)]最通用,也是最蟒蛇的。

纯Python

  • 专门用于2个元素的嵌套列表:

    [[x1 * x2, y1 * y2] for (x1, y1), (x2, y2) in zip(V, I)]

  • 更一般地,对于任何长度的嵌套列表:

    [[x * y for x, y in zip(i, v)] for i, v in zip(I, V)]

脾气暴躁

  • 嵌套列表,其中所有内部列表具有相同数量的元素:

    (np.array(I) * np.array(V)).tolist()

  • 嵌套列表,当内部列表可能具有不同数量的元素而相应列表具有相同数量的元素时:

    [(np.array(i) * np.array(v)).tolist() for i, v in zip(I, V)]

最后一个很丑陋,但是numpy并非旨在处理具有不同列数的矩阵。

答案 1 :(得分:1)

使用zip和列表理解。

例如:

V = [[10,20],[40,50]]
I = [[1,2],[4,5]]
res = []
for i in zip(V, I):
    res.append([j * k for j, k in zip(*i)])
print(res)

输出:

[[10, 40], [160, 250]]

答案 2 :(得分:1)

当然不是最佳工具,但在普通的Python中,这种嵌套的理解将适用于2D矩阵:

[[a*b for a, b in zip(v, i)] for v, i in zip(V, I)]

答案 3 :(得分:1)

>>> [[x*y for x,y in zip(*t)] for t in zip(V, I)]
[[10, 40], [160, 250]]

答案 4 :(得分:0)

使用numpy

import numpy as np

V = np.matrix([[10,20],[40,50]])
I = np.matrix([[1,2],[4,5]])

np.multiply(V,I)

礼物:

[[ 10  40]
 [160 250]]