将列表转换为矩阵

时间:2019-05-17 02:56:17

标签: python numpy

我有一个对象列表[A,B,C,D] 我想创建一个这样的矩阵

  A B C D
A
B
C
D

每个矩阵单元格中的值都是使用某种逻辑来计算的(例如(col A,B行)的输入是(A.val-B.Val)

我可以编写一个函数来做到这一点。但是我有一种感觉,可以用一种更轻松,更好的方式来做到这一点。

如何在python中轻松做到这一点? (可能使用numpy吗?) 另外,用于查找此类操作的搜索字词是什么?

1 个答案:

答案 0 :(得分:3)

执行此操作的一种简单方法是使用嵌套列表理解。该操作是列表最里面的表达式,可以轻松更改。

>>> vals = [1, 2, 3, 4]
>>> matrix = [[x - y for x in vals] for y in vals]
>>> matrix
    [[ 0,  1,  2, 3],
     [-1,  0,  1, 2],
     [-2, -1,  0, 1],
     [-3, -2, -1, 0]]

在这里,我使用元素之间的减法来匹配您的示例,但是请注意,此语法接受对象之间的任何任意操作:

matrix = [[obj1.some_operation(obj2) for obj1 in vals] for obj2 in vals]

如果以后需要在numpy中使用matrix,可以随时将其转换为numpy.array()