Преобразовать список в матрицу - PullRequest
1 голос
/ 17 мая 2019

У меня есть список объектов [A, B, C, D] Я хочу создать такую ​​матрицу, чтобы

  A B C D
A
B
C
D

в то время как значение в каждой ячейке матрицы вычисляется с использованием некоторой логики (например, запись для (столбец A, строка B) равна (A.val - B.Val)

Я могу написать функцию для этого. Но у меня есть ощущение, что это можно сделать проще и лучше.

Как это легко сделать в python? (вероятно, используя NumPy?) И какие условия поиска я должен использовать, чтобы найти такие операции?

1 Ответ

3 голосов
/ 17 мая 2019

Простой способ сделать это с помощью понимания вложенного списка. Операция является выражением в самом внутреннем понимании списка и может быть легко изменена.

>>> 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().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...