Blatt 7, 1b)

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Blatt 7, 1b)
Hallo zusammen,

ich habe bei der Lösung von der 1b) nur ein formales Problem:
In den Ausgabe-Arrays werden jeweils zwei eckige Klammern vor und hinter dem Inhalt generiert und deshalb schlagen die Testcases als Fehler an. Soll ich da nach einer anderen Lösung suchen oder passt das trotzdem, da die Werte stimmen? Falls es nicht passen sollte, wie kann ich das denn anders lösen als generell ein Zeros-Ndarray als Result-polygon anzulegen? Gibts da ne Möglichkeit, dass am Ende keine 2 eckigen Klammern angezeigt werden?

So schaut das Ganze aus:

Aufgabe 1b: De Casteljau Algorithmus (1 Punkt)

Der Aufruf de_casteljau
(array([[0, 0],
[1, 0]]), 0.5) liefert das Ergebnis array([[0.5, 0. ]]), richtig wäre
aber array([0.5, 0. ]).
Der Aufruf de_casteljau
(array([[0, 0],
[1, 0]]), 0.2) liefert das Ergebnis array([[0.2, 0. ]]), richtig wäre
aber array([0.2, 0. ]).
Der Aufruf de_casteljau
(array([[0., 0.],
[1., 1.]]), 0.2) liefert das Ergebnis array([[0.2, 0.2]]), richtig wäre
aber array([0.2, 0.2]).
Der Aufruf de_casteljau
(array([[0., 0.],
[1., 1.],
[2., 2.]]), 0.5) liefert das Ergebnis array([[1., 1.]]), richtig wäre
aber array([1., 1.]).
Der Aufruf de_casteljau
(array([[0., 0.],
[1., 1.],
[2., 0.]]), 0.5) liefert das Ergebnis array([[1. , 0.5]]), richtig wäre
aber array([1. , 0.5]).
Der Aufruf de_casteljau
(array([[0., 0.],
[1., 1.],
[2., 2.],
[3., 3.]]), 0.5) liefert das Ergebnis array([[1.5, 1.5]]), richtig wäre
aber array([1.5, 1.5]).
Der Aufruf de_casteljau
(array([[0., 0.],
[1., 1.],
[2., 2.],
[3., 3.]]), 0.2) liefert das Ergebnis array([[0.6, 0.6]]), richtig wäre
aber array([0.6, 0.6]).
Der Aufruf de_casteljau
(array([[0., 0.],
[1., 1.],
[2., 2.],
[3., 3.],
[4., 4.]]),
0.2) liefert das Ergebnis array([[0.8, 0.8]]), richtig wäre aber array([0.8,
0.8]).
Der Aufruf de_casteljau
(array([[0., 0.],
[1., 1.],
[2., 2.],
[1., 1.],
[0., 0.]]),
0.5) liefert das Ergebnis array([[1.25, 1.25]]), richtig wäre aber
array([1.25, 1.25]).
Der Aufruf de_casteljau
(array([[3., 2.],
[2., 5.],
[7., 6.],
[8., 1.]]), 0.3) liefert das Ergebnis array([[3.45 , 4.052]]), richtig
wäre aber array([3.45 , 4.052]).
Diese Teilaufgabe enthält Fehler!

Danke schonmal!


Du könntest generell einfach immer das selbe Array nehmen und am Ende dann P[0] ausgeben.


Oha, das ist natürlich richtig einfach :smiley: Daaanke für den Tip, das klappt! :slight_smile:


fürs verständnis: bei numpy arrays kann man die array-dimensionen setzen

dies geht explixit:

In [1]: import numpy as np

In [2]: np.array([1, 2, 3], ndmin=1)
Out[2]: array([1, 2, 3])

In [3]: np.array([1, 2, 3], ndmin=2)
Out[3]: array([[1, 2, 3]])

In [4]: np.array([1, 2, 3], ndmin=3)
Out[4]: array([[[1, 2, 3]]])

jedoch auch implizit durch die struktur der liste als eingabe (bzw. liste von listen, liste von listen von listen, usw.):

In [1]: import numpy as np

In [2]: np.array([1, 2, 3])
Out[2]: array([1, 2, 3])

In [3]: np.array([[1, 2, 3]])
Out[3]: array([[1, 2, 3]])

In [4]: np.array([[[1, 2, 3]]])
Out[4]: array([[[1, 2, 3]]])

wie man an deiner ausgabe sehen kann, resultiert der test in 2-dimensionalen arrays bei dir, jedoch werden 1-dimensionale erwartet. wie schon
po11veto sagte, kannst du deine 2-dimensionalen arrays auf 1-dimensionale reduzieren indem du einen index für die erste dimension angibst:

In [1]: import numpy as np

In [2]: np.array([[1, 2, 3]])
Out[2]: array([[1, 2, 3]])

In [3]: np.array([[1, 2, 3]])[0]
Out[3]: array([1, 2, 3])