Я пытаюсь вычислить расстояние евклидового среди словарных элементов, как показано нижеевклидова расстояния между словарными элементами
#!/usr/bin/python
import itertools
from scipy.spatial import distance
def Distance(data):
for subset in itertools.combinations(data, 2):
print subset
#This shows a tuple of two element instead of the elements of the dictionary.
dst = distance.euclidean(subset)
if __name__ == "__main__":
data = {}
data['1'] = [5, 3, 4, 4, 6]
data['2'] = [1, 2, 3, 4, 5]
data['3'] = [3, 1, 2, 3, 3]
data['4'] = [4, 3, 4, 3, 3]
data['5'] = [3, 3, 1, 5, 4]
Distance(data)
Проблема в том, что, когда я пытаюсь вычислить комбинацию словарных элементов я получаю то, что я не ожидайте, как прокомментировано в коде. Я думаю, что я делаю что-то неправильно с itertools.combinations ...
спасибо! Я остановился, потому что результаты не были ожидаемыми. Теперь я могу использовать значение 'dst' для своей цели. Любопытство: в чем смысл передачи '* подмножества' функции? еще раз спасибо! – gaetano
Прохладный - рад, что все получилось! Это способ передачи нескольких параметров. Если у вас есть список или кортеж, вы можете использовать его, чтобы развернуть его до набора аргументов. Если у вас есть словарь, вы можете сделать то же самое с именованными аргументами. Взгляните на эту часть руководства по python: https://docs.python.org/2/tutorial/controlflow.html#more-on-defining-functions –