Wieso kommt da diese Fehlermeldung (Python - Numpy)?
Hi, ich versuche die Distanzen zwischen einem Punkt und Punkten eines Numpy-Arrays zu berechnen:
c = numpy.array([1, 2])
d = numpy.array([[4, 2], [1, 4]])
if data.ndim == 2:
distances = numpy.zeros(data.shape[0])
if point.shape != data[0].shape:
print("Es kann keine Distanz berechnet werden, weil die Anzahl der Werte nicht übereinstimmt.")
else:
for i in range(len(data)):
point2 = data[i].copy()
print(point)
print(point2)
distances[i] = numpy.subtract(point, point2)
print(distances)
Hat jemand eine Idee, warum da dieser Fehler kommt:
TypeError: only size-1 arrays can be converted to Python scalars
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
distances[i] = numpy.subtract(point, point2)
ValueError: setting an array element with a sequence.
?
Viele Grüße
c ist point und d ist data, sorry
2 Antworten
Wenn du statt
distances = numpy.zeros(data.shape[0])
nur
distances = numpy.zeros(data.shape[0])
Hinschreibst, wird es ausgeführt.
Ich vermute aber, dass du nicht das erreichst, was du eigentlich erreichen willst.
Mit numpy.subtract(point, point2) ziehst du nur ein Array von einen anderen ab. Du erhälst also wieder ein Array. Ist zum Beispiel point = [2,1] und point2 = [1,1], dann kommt [1,1] raus. (Du hättest dann auch genauso gut point-point2 nutzen können)
Kann es sein, dass du stattdessen die Distanz der beiden Punkte haben willst? Also eine reelle Zahl statt einen Vektor?
Btw: den Copy() Befehl brauchst du hier auch überhaupt nicht. Du kannst direkt auf data[i] zugreifen und damit arbeiten.
Du versuchst, ein Numpy-Array zu einem Element im distances-Array zuzuweisen, aber das distances-Array wurde als ein Array von 0en erstellt, was bedeutet, dass es nur eine Größe hat.
Die Argumente wären im obigen Fall dort:
[0] * 2, [2] * 2, [1] * 2
bzw.:
[0, 0], [2, 2], [1, 1]
xD
Ja, weil dein Array distances den Shape (n, 1) hatte.
Jeder Eintrag davon hat also den Shape (1), bzw es ist eine Zahl. Du wolltest jetzt aber in einen Eintrag ein Array vom Shape (1,2) reinschreiben. Das passt da natürlich nicht rein.
Wenn ich distances = numpy.arange(0, data.shape[0], 1) nutze, passiert selbiges
Sowas scheint leider auch nicht zu gehen xD