Chcę utworzyć tablicę numpy, która zawiera liczbę wystąpień wartości (od 1 do 3) w określonej lokalizacji. Na przykład, jeśli mam:Jedno rozwiązanie liniowe do edycji numpy tablic zliczeń? (python)
a = np.array([[1,2,3],
[3,2,1],
[2,1,3],
[1,1,1]])
Chcę wrócić tablicę tak:
[[[ 1 0 0]
[ 0 1 0]
[ 0 0 1]]
[[ 0 0 1]
[ 0 1 0]
[ 1 0 0]]
[[ 0 1 0]
[ 1 0 0]
[ 0 0 1]]
[[ 1 0 0]
[ 1 0 0]
[ 1 0 0]]]
Gdzie tablica mówi mi, że 1 występuje raz na pierwszej pozycji, 2 występuje raz w druga pozycja, 3 występuje raz w trzeciej pozycji, 1 występuje raz w czwartej pozycji, itd. Później, będę miał więcej macierzy wejściowych o tych samych wymiarach, i chciałbym dodać na sumach wartości do tej tablicy zliczeń.
Kod mam teraz jest:
a = np.array([[1,2,3],
[3,2,1],
[2,1,3],
[1,1,1]])
cumulative = np.zeros((4,3,3))
for r in range(len(cumulative)):
for c in range(len(cumulative[0])):
cumulative[r, c, a[r,c]-1] +=1
To daje mi wyjście chcę. Jednak chciałbym skondensować do pętli w jednej linii, wykorzystując linię podobną do tej:
cumulative[:, :, a[:, :]-1] +=1
Linia ta nie działa, i nie mogę znaleźć coś w Internecie, w jaki sposób wykonać tę operację. Jakieś sugestie?
To cool! Czy mógłbyś wyjaśnić dokładnie, jak to działa? (przepraszam, stosunkowo nowy w python) –