#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
со словарем, чтобы заменить кортеж заданным значением.