Матрица, построенная из попарных значений массива

#python #algorithm #numpy

Вопрос:

У вас есть элегантное решение для построения матрицы на основе массива с учетом попарных значений x, y и z?

Входной массив:

 A
A
B
B
C
 

Матрица для построения (я показал индекс и заголовок для понимания, но окончательная матрица-это только значения):

     A   A   B   B   C
A   1   1   x   x   y
A   1   1   x   x   y
B   x   x   1   1   z
B   x   x   1   1   z
C   y   y   z   z   1
 

Комментарии:

1. Можете ли вы объяснить значение этого x, y, and z ? Похоже, ты хочешь чего-то подобного a == a[:, None] , хотя.

2. x, y and z являются фиктивными переменными.

Ответ №1:

Вот моя идея: создайте словарь с ключом кортеж (пара):

 a = np.array(['A','A','B','B','C'])
d = {('A','A'):1,
     ('B','B'):1,
     ('C','C'):1,
     ('A','B'):x,
     ('A','C'):y,
     ('B','C'):z}
 

Создайте матрицу кортежей , используя a[:, None] и a[None, :] , я блокирую здесь.
У меня должно быть что-то вроде этого:

 ('A', 'A')  ('A', 'A')  ('A', 'B')  ('A', 'B')  ('A', 'C')
('A', 'A')  ('A', 'A')  ('A', 'B')  ('A', 'B')  ('A', 'C')
('B', 'A')  ('B', 'A')  ('B', 'B')  ('B', 'B')  ('B', 'C')
('B', 'A')  ('B', 'A')  ('B', 'B')  ('B', 'B')  ('B', 'C')
('C', 'A')  ('C', 'A')  ('C', 'B')  ('C', 'B')  ('C', 'C')
 

Есть какие-нибудь предложения?

А затем используйте np.where со словарем, чтобы заменить кортеж заданным значением.