Mam dużą macierz rozmiaru np. 1280x800 = 960 000 elementów z wartościami z przedziału [0,255] jednak ułożonymi w tej macierzy bardzo nieregularnie. Chciałbym zrobić przekształcenie tej macierzy w następujący sposób: 64 najmniejszych wartości w tej macierzy zamienić na 100; kolejnych 64 zamienić na 200; kolejnych 64 zamienić na 300 i tak dalej aż do "wyczerpania" wszystkich elementów macierzy. A więc celem jest zrobienie tak, aby zamienić istniejące wartości na jakieś nowe w sposób jednostajny (tutaj 960 000/64 = 15 000, a więc byłoby 15 000 takich "bloków").
Myślę, że bardziej obrazowo będzie to widać na przykładzie. Załóżmy, że mamy macierz A rozmiaru 3x3 i chcemy zamienić elementy co 3.
\(\displaystyle{ A= \left[
\begin{array}{ccc}
0 & 1 & 2\\
2 & 0 & 2\\
9 & 4 & 7
\end{array}
\right]
\qquad}\)
Zamieniamy pierwsze trzy najmniejsze elementy, czyli 0, 0 i 1 na 100; potem trzy kolejne (2, 2 i 2) zamieniamy na 200 i na końcu zostaje 4, 7 i 9 - zamieniamy na 300. A więc końcowa macierz to \(\displaystyle{ A_{przekszt}= \left[
\begin{array}{ccc}
100 & 100 & 200\\
200 & 100 & 200\\
300 & 300 & 300
\end{array}
\right]
\qquad}\).
Nie bardzo mam pomysł, jak się za to zabrać. Gdyby macierz była mała (jak chociażby powyżej w przykładzie), to od biedy można by to rozpisać ręcznie if'ami, ale w przypadku tak dużej macierzy opcja taka zdecydowanie odpada. Funkcja
find()
wydaje mi się, że też odpada, bo ona wymaga poadania, jakiego konkretnie elementu chcę szukać, a ja tego nie wiem. Czy ktoś ma może jakiś pomysł, jak to ruszyć?Pozdrawiam