首页 > 解决方案 > 将列表转换为矩阵

问题描述

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

  A B C D
A
B
C
D

而每个矩阵单元格中的值是使用某种逻辑计算的(例如 (col A, row B) 的条目是 (A.val - B.Val)

我可以编写一个函数来做到这一点。但我有一种感觉,这可以用一种更简单、更好的方式来完成。

如何在python中轻松做到这一点?(可能使用 numpy?)我应该使用哪些搜索词来查找此类操作?

标签: pythonnumpy

解决方案


一个简单的方法是使用嵌套列表推导。该操作是最内层列表推导中的表达式,可以轻松更改。

>>> 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]

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


推荐阅读