Ich will mit Polynomen in x,y,z rechnen und will mit den Exponentenvektoren operieren. Unten ist das verkürzt mit 1-dimensionalen Vektoren: Woher kommt die 7? Die Ursache liegt wohl darin, dass der Term h2 zweimal vorkommt.
def ma(m,a): # addiert m zu a
for p in a:
p[0] = p[0] + m[0]
return a
h1 = [1]
h2 = [2]
h3 = [3]
b = [h1,h2,h3]
print(h2)
print(b)
c = ma(h2,b)
print(c)
""" Ausgabe
[2]
[[1], [2], [3]]
[[3], [4], [7]]
"""
Listen, falsche Rechnung?
Die Ursache liegt darin, dass Listen veränderlich sind, und du eine Liste in eine andere Liste gesteckt hast, und dann die erste Liste modifizierst. Damit ist scheint der Inhalt der äußeren auch verändert, weil die nicht die Daten selbst, sondern nur Verweise auf eben andere Listen enthält.
Man kann das alles selbst bauen, aber ich würde stark den Umstieg auf das numpy Paket empfehlen.
Man kann das alles selbst bauen, aber ich würde stark den Umstieg auf das numpy Paket empfehlen.
-
- User
- Beiträge: 61
- Registriert: Montag 26. Dezember 2022, 14:53
Vielen Dank,
ich habe die Veränderung des Operanden bemerkt, duch Ersetzung
von [2] durch [2].copy() kann ich das umgehen. Aber das ist natürlich kein vernünftiger Weg.
Gibt es denn ein numpy-Paket fürs formale Rechnen mit multivariablen Polynomen, also dem formalen Rchnen im Ring R[x,y,z] ?
ich habe die Veränderung des Operanden bemerkt, duch Ersetzung
von [2] durch [2].copy() kann ich das umgehen. Aber das ist natürlich kein vernünftiger Weg.
Gibt es denn ein numpy-Paket fürs formale Rechnen mit multivariablen Polynomen, also dem formalen Rchnen im Ring R[x,y,z] ?
- __blackjack__
- User
- Beiträge: 14067
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@hubertgrassmann: Du solltest am besten die Liste(n) gar nicht verändern sondern neue erstellen. Es macht auch keinen Sinn `a` als Argument zu nehmen und dann auch wieder als Rückgabewert zu liefern. Der Aufrufer hat das Objekt ja bereits, sonst hätte er es ja nicht übergeben können. Oder anders `c` ist überflüssig, denn das ist identisch mit `b`.
``[2].copy()`` ist auch extrem unsinnig, aber das hast Du sicher nicht gemacht/gemeint.
``[2].copy()`` ist auch extrem unsinnig, aber das hast Du sicher nicht gemacht/gemeint.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari