Python :: Aufgabe #353 :: Lösung #1

1 Lösung Lösung öffentlich
#353

Erzeugung einer Entfernungstabelle

Anfänger - Python von hollst - 27.04.2021 um 20:13 Uhr
In der unendlich ausgedehnten euklidischen 2D-Eben wähle man zufällig N unterschiedliche Punkte P1, P2 ... PN. Die XY-Punktkoordinaten seien in Meter bemaßt.

Man schreibe eine Funktion, die P1 ... PN als Input annimmt und als Rückgabe eine Entfernungstabelle als (Double) N x N - Matrix ausgibt. D. h. die Hauptdiagonale ist mit Null besetzt und die Matrix ist bzgl. dieser symmetrisch.

Viel Spaß!
#1
vote_ok
von eisheiliger (3750 Punkte) - 18.07.2021 um 18:12 Uhr
Quellcode ausblenden Python-Code

"""
#353: Erzeugung einer Entfernungstabelle
In der unendlich ausgedehnten euklidischen 2D-Eben wähle man zufällig N unterschiedliche Punkte P1, P2 ... PN. Die XY-
Punktkoordinaten seien in Meter bemaßt. Man schreibe eine Funktion, die P1 ... PN als Input annimmt und als Rückgabe
eine Entfernungstabelle als (Double) N x N - Matrix ausgibt. D. h. die Hauptdiagonale ist mit Null besetzt und die
Matrix ist bzgl. dieser symmetrisch.
"""

import random
from scipy.spatial import distance


def dist(ort):
    fol, erh = [], []
    for i in range(0, len(ort)):
        for j in range(0, len(ort)):
            fol.append([i, j])
    for i in range(len(fol)):
        zwi = fol[i]
        dst = 0
        for j in range(0, len(zwi) - 1):
            dst += distance.euclidean(ort[zwi[j]], ort[zwi[j + 1]])
        erh.append(int(dst))
    print("und das ist die Entfernungstabelle:")
    h = int(len(erh) ** 0.5)
    for i in range(0, len(erh), h):
        print(erh[i: i + h])


def koord():
    orte = []
    n = random.randint(4, 10)
    while n >= 0:
        neu = [random.randint(0, 50,)] + [random.randint(0, 50,)]
        if neu not in orte:
            orte.append(neu)
            n -= 1
    print("Es werden", len(orte), "XY-Punktkoordinaten verarbeitet:")
    print(orte)
    dist(orte)


koord()


Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
1988228

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.