Macierz odległości

0

Muszę stworzyć program dodający wyniki obliczeń odległości między zbiorami do macierzy odległości.
Wyniki mam aktualnie w postaci listy, ale jeśli to konieczne mogę zmienić.
Przykład:
Dla wyników działań: 1. zbiór z 2., 1. z 3. i 2. z 3.
lista = [1.25, 3, 1.5]
program utworzy macierz 3x3:
[[0, 1.25, 3],
[1.25, 0, 1.5],
[3, 1.5, 0]]

0

Jakie to zbiory i jaka jest definicja odległości mniędzy nimi? Co dokladnie ma być wejściu, a co na wyjściu; Daj jakiś przykład z wyjaśnieniami.

0

Odległość obliczamy jako ułamek, w którego liczniku znajduje się suma liczby elementów należących tylko do A albo tylko do B, a w mianowniku łączna liczba elementów sumy zbiorów A i B. Mój program pobiera z pliku zbiory, oblicza odległość i dodaje do listy. Aktualnie mam coś takiego:

lista = []
plik = open("plik.txt","r")

for i in plik:
    zbiory = i.split(", ")
    A = set(zbiory[0])
    B = set(zbiory[1])
    a = len(A.difference(B))
    b = len(B.difference(A))
    c = len(A.union(B))
    metryka = (a*b)/c
    lista.append(round(metryka, 2))
print(lista)
plik.close()
0

Odległość obliczamy jako ułamek, w którego liczniku znajduje się suma liczby elementów należących tylko do A albo tylko do B, a w mianowniku łączna liczba elementów sumy zbiorów A i B

Ta definicja nie spełnia definicji metryki, co, na przykład, z odległością zbiorów zeroelementowych? Nie mówiąc o tym, że nie jest to funkcja - skoro dla jednego punktu z dziedziny może przybierać różne wartości.
Gdybyś naprawił definicję odległości, dalej nie widzę sposobu tworzenia tej macierzy...

1
lion137 napisał(a):

Gdybyś naprawił definicję odległości, dalej nie widzę sposobu tworzenia tej macierzy...

Da się, na podstawie samej analizy wejścia i wyjścia:

from itertools import combinations


lista = [1.25, 3, 1.5]
comb_list = [list(j) for i,j in enumerate(combinations(lista, 2))]

for i,j in enumerate(comb_list): 
    j.insert(i, 0)

print(comb_list)
# [[0, 1.25, 3], [1.25, 0, 1.5], [3, 1.5, 0]]

Przy czym to nie jest do końca dobre rozwiązanie. Ono zadziała tylko, jeśli mamy N-elementową listę i N-1 kombinacji.

1

Ha, ha, rzeczywiście, ale Próbujesz rozwikłać, to co OP powinien wytłumaczyć, chyba że sam nie wie :-D

0

Przykład dla macierzy 4x4.
W pliku mam zapisane dane w taki sposób (wszystkie możliwe kombinacje):
zbiór1 zbiór2
zbiór1 zbiór3
zbiór1 zbiór4
zbiór2 zbiór3
zbiór2 zbiór4
zbiór3 zbiór4
Teraz przykładowe wartości jakie z nich powstały (wymyślam, bo nie mam napisanych przykładowych zbiorów):
[0.8, 1.2, 4.3, 5, 7, 0.2]
Macierz:
[[0, 0.8, 1.2, 4.3],
[0.8, 0, 5, 7],
[1.2, 5, 0, 0.2],
[4.3, 7, 0.2, 0]]

0

Bardo możliwe, że źle zabieram się do tego zadania. Mam do zrobienia program, który z pliku pobiera zbiory, liczy je metryką Marczewskiego–Steinhausa, a następnie tworzy macierz odległości.

0

To Podaj definicję i funkcję liczącą tę metrykę na zbiorach, potem jaką Chesz macierz

0

Definicja: Odległość to ułamek, w którego liczniku znajduje się liczba elementów różnicy symetrycznej zbiorów A i B (liczba elementów należących tylko do A albo tylko do B), a w mianowniku — łączna liczba elementów sumy zbiorów A i B. Muszę otrzymać macierz odlległości. Dane ze zbiorami muszą być pobierane z pliku. To jedyne informacje jakie mam w zadaniu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1