Создание матрицы значений в Python - PullRequest
0 голосов
/ 01 марта 2019

У меня есть следующий набор данных

d = {'dist': [100, 200, 200, 400],'id': [1, 2, 3, 4]}

df = pd.DataFrame(data= d)

Я хотел бы создать матрицу значений вокруг идентификатора

с помощью вычисления: dist (id1) - dist (id2)

null  |  1  |  2  |  3  |  4
1     |  0  | 100 | 100 | 300 
2     |-100 |  0  |  0  | 200
3     |-100 |  0  |  0  | 200
4     |-300 |-200 |-200 | 0

Буду благодарен за любые советы

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

(Правка) Вот упрощенная версия через красоту numpy:

import numpy as np

d = {'dist': [100, 200, 200, 400],'id': [1, 2, 3, 4]}

a = np.array(d['dist']).reshape(1,-1)
b = np.array(a).reshape(-1,1)

# the solution
print a-b

# [[   0  100  100  300]
#  [-100    0    0  200]
#  [-100    0    0  200]
#  [-300 -200 -200    0]]

(Старый ответ) Вы можете сделать это с помощью маленькой матричной алгебры:

import numpy as np

d = {'dist': [100, 200, 200, 400],'id': [1, 2, 3, 4]}

a = np.array(d['dist']).reshape(1,-1)
b = np.array(a).reshape(-1,1)

# some matrix algebra
c = b.dot(a)
e = c/a
f = c/b

# the solution
print f-e

# [[   0  100  100  300]
#  [-100    0    0  200]
#  [-100    0    0  200]
#  [-300 -200 -200    0]]
0 голосов
/ 01 марта 2019

Я не знаком с numpy, но вы можете создать матрицу, учитывая существующую структуру данных, используя это слегка сложное понимание словаря:

matrix = {id: {v: d.get("dist")[i] - d.get("dist")[j] for j, v in enumerate(d.get("id"))} for i, id in enumerate(d.get("id"))}

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

...