Commit ee3d2981 authored by Jochen Schulz's avatar Jochen Schulz
Browse files

fix broadcasting image

parent d5f09cbe
Pipeline #178523 passed with stages
in 1 minute and 50 seconds
......@@ -492,7 +492,7 @@ Da fast alle Operationen in Numpy element-weise ausgeführt werden, müssen alle
**Broadcasting** schwächt die Bedingung etwas ab: Ist ein Array ein *Singleton* entlang einer Dimension (d.h. hat Länge 1 in dieser Dimension), wird diese *implizit* auf die notwendige Länge dupliziert, falls nötig.
[![](http://www.scipy-lectures.org/_images/numpy_broadcasting.png)](http://www.scipy-lectures.org/intro/numpy/operations.html#broadcasting)
[![](https://scipy-lectures.org/_images/numpy_broadcasting.png)](https://scipy-lectures.org/intro/numpy/operations.html#broadcasting)
Broadcasting vergleicht die `shapes` der Arrays **von rechts nach links**. Fehlende Dimensionen und Singletons werden dupliziert, alle anderen müssen übereinstimmen.
......@@ -524,35 +524,6 @@ Es sollen zwei Arrays `a` und `b` addiert werden.
(a + b).shape == (2, 3, 4)
```
**Vorberechnung von vollen Arrays**
Manchmal werden nicht nur die Achsen, sondern volle Koordinaten-Arrays benötigt.
Eine Möglichkeit ist es, das Broadcasting "vorzuberechnen" mit `broadcast_arrays`:
```{code-block}
X, Y, ... = np.broadcast_arrays(x, y, ...)
```
```{code-cell}
x, y = np.ogrid[0:6:1, 0:50:10]
x, y = np.broadcast_arrays(x, y)
print(x)
print(y)
```
Dabei werden, wie beim Broadcasting, keine Kopien gemacht. Schreiben in die Arrays hat also unerwünschte Effekte:
```{code-cell}
x[0, 0] = -1
x
```
Alternativ gibt es `numpy.mgrid`, das wie `ogrid` verwendet wird, aber volle Arrays erzeugt. Diese verbrauchen aber auch entsprechend mehr Speicher und sind allgemein ineffizienter.
```{code-cell}
x, y = np.mgrid[0:6:1, 0:50:10]
print((x.shape, y.shape))
```
## Gitter/Grid-Erzeugung
......@@ -587,3 +558,33 @@ x + y
```{code-cell}
np.ogrid[0:13:3j, 0:13:3]
```
**Vorberechnung von vollen Arrays**
Manchmal werden nicht nur die Achsen, sondern volle Koordinaten-Arrays benötigt.
Eine Möglichkeit ist es, das Broadcasting "vorzuberechnen" mit `broadcast_arrays`:
```{code-block}
X, Y, ... = np.broadcast_arrays(x, y, ...)
```
```{code-cell}
x, y = np.ogrid[0:6:1, 0:50:10]
x, y = np.broadcast_arrays(x, y)
print(x)
print(y)
```
Dabei werden, wie beim Broadcasting, keine Kopien gemacht. Schreiben in die Arrays hat also unerwünschte Effekte:
```{code-cell}
x[0, 0] = -1
x
```
Alternativ gibt es `numpy.mgrid`, das wie `ogrid` verwendet wird, aber volle Arrays erzeugt. Diese verbrauchen aber auch entsprechend mehr Speicher und sind allgemein ineffizienter.
```{code-cell}
x, y = np.mgrid[0:6:1, 0:50:10]
print((x.shape, y.shape))
```
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment