我有一个对象列表[A,B,C,D] 我想创建一个这样的矩阵
A B C D
A
B
C
D
每个矩阵单元格中的值都是使用某种逻辑来计算的(例如(col A,B行)的输入是(A.val-B.Val)
我可以编写一个函数来做到这一点。但是我有一种感觉,可以用一种更轻松,更好的方式来做到这一点。
如何在python中轻松做到这一点? (可能使用numpy吗?) 另外,用于查找此类操作的搜索字词是什么?
答案 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()
。