Hallo,
für eine HDR Rekonstruktion soll eine Funktion angelegt werden, die eine Gewichtungsmatrix erzeugt.
Die Form ist folgende:
def hatFun(x, l, m, h):
x ist die Eingangsmatrix, l der kleinste Wert, m der maximal Wert und h der höchste Wert.
Die result Matrix überführt den maximal wert in den wert 1, m und l in die Werte 0, so dass von l bis m die Werte linear bis 1 ansteigen und von m bis h
die Werte linear absteigen.
Meine idee war folgendes:
result=np.zeros(x.shape)
result[x<=l]=0
result[x>=h] =0
result[x<=m]= (x[x<=m]-l)*(1/m)
result[x<m]= (x[x<m]-m+1)*(1/(h-m))
return result
Es wird also eine Matrix angelegt, die an entsprechenden Stellen entsprechend befüllt werden soll. Das größte Problem ist, dass ich hier einen KeyError bekomme. Kann mir jemand sagen warum der Error geworfen wird?
~\anaconda3\lib\site-packages\matplotlib\backends\backend_svg.py in print_svg(self, filename, *args, **kwargs)
1200 detach = True
1201
-> 1202 result = self._print_svg(filename, fh, **kwargs)
1203
1204 # Detach underlying stream from wrapper so that it remains open in
~\anaconda3\lib\site-packages\matplotlib\image.py in _draw_list_compositing_images(renderer, parent, artists, suppress_composite)
133 if not_composite or not has_images:
134 for a in artists:
--> 135 a.draw(renderer)
136 else:
137 # Composite any adjacent images together
~\anaconda3\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
36 renderer.start_filter()
37
---> 38 return draw(artist, renderer, *args, **kwargs)
39 finally:
40 if artist.get_agg_filter() is not None:
~\anaconda3\lib\site-packages\matplotlib\image.py in _draw_list_compositing_images(renderer, parent, artists, suppress_composite)
133 if not_composite or not has_images:
134 for a in artists:
--> 135 a.draw(renderer)
136 else:
137 # Composite any adjacent images together
~\anaconda3\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
36 renderer.start_filter()
37
---> 38 return draw(artist, renderer, *args, **kwargs)
39 finally:
40 if artist.get_agg_filter() is not None:
~\anaconda3\lib\site-packages\matplotlib\axis.py in draw(self, renderer, *args, **kwargs)
1203 ticks_to_draw = self._update_ticks()
1204 ticklabelBoxes, ticklabelBoxes2 = self._get_tick_bboxes(ticks_to_draw,
-> 1205 renderer)
1206
1207 for tick in ticks_to_draw:
~\anaconda3\lib\site-packages\matplotlib\axis.py in _get_tick_bboxes(self, ticks, renderer)
1148 """Return lists of bboxes for ticks' label1's and label2's."""
1149 return ([tick.label1.get_window_extent(renderer)
-> 1150 for tick in ticks if tick.label1.get_visible()],
1151 [tick.label2.get_window_extent(renderer)
1152 for tick in ticks if tick.label2.get_visible()])
~\anaconda3\lib\site-packages\matplotlib\axis.py in (.0)
1148 """Return lists of bboxes for ticks' label1's and label2's."""
1149 return ([tick.label1.get_window_extent(renderer)
-> 1150 for tick in ticks if tick.label1.get_visible()],
1151 [tick.label2.get_window_extent(renderer)
1152 for tick in ticks if tick.label2.get_visible()])
~\anaconda3\lib\site-packages\matplotlib\text.py in get_window_extent(self, renderer, dpi)
888 raise RuntimeError('Cannot get window extent w/o renderer')
889
--> 890 bbox, info, descent = self._get_layout(self._renderer)
891 x, y = self.get_unitless_position()
892 x, y = self.get_transform().transform_point((x, y))
~\anaconda3\lib\site-packages\matplotlib\text.py in _get_layout(self, renderer)
422
423 ret = bbox, list(zip(lines, zip(ws, hs), *xys.T)), descent
--> 424 self._cached[key] = ret
425 return ret
426
~\anaconda3\lib\site-packages\matplotlib\cbook\__init__.py in __setitem__(self, k, v)
647 if k not in self:
648 if len(self) >= self.maxsize:
--> 649 del self[self._killkeys[0]]
650 del self._killkeys[0]
651 self._killkeys.append(k)
@Beginner2019: Namen schreibt man in Python klein_mit_unterstrichen. Also `hat_fun()` statt `hatFun()`. Falls das `fun` nix mit Spass zu hat sondern für Funktion stehen soll, dann hat das nix im Namen zu suchen. Kryptische Abkürzungen in Namen sind schlecht. Was uns dann zu den Argumentnamen bring: WTF. Einbuchstabige Namen sind nur sehr selten aussagekräftig. `x` beispielsweise wenn der Wert für eine X-Koordinate steht. `l` ist ein besonders schlechter Name weil der in vielen Schriftarten kaum oder gar nicht 1 unterscheidbar ist.
Ein Array mit 0en zu erstellen und dann in den ersten beiden Schritten ausgewählte 0en durch 0en zu ersetzen erscheint wenig sinnvoll.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari