Mam dużą tablicę numpy (zazwyczaj rzędu 500 000 x 1024, ale może być większa) i próbuję wykonać kilka procesów, które zależą od tego, gdzie wartości dodatnie w tablicy są. bardzo mały przykład tablica może byćEfficiently znalezienie zakresu indeksów dla wartości dodatnich w tablicy numpy 2D
[[ 0., 0., 0., 0., 0.,-1.,-1., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 1., 1., 0., 0., 1., 5., 0., 0.],
[ 0., 1., 1., 0., 0., 0., 1., 0., 0.],
[ 0., 3., 1., 0., 0., 2., 1., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 0., 1., 1., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.]]
Pierwszy jest zastąpienie żadnych zer pomiędzy dodatnimi, które są mniej niż trzy kolumny od siebie w każdym rzędzie. więc jeśli mogę wymienić tych liczb z 50, mój przykład wyjście byłoby
[[ 0., 0., 0., 0., 0.,-1.,-1., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 1., 1.,50.,50., 1., 5., 0., 0.],
[ 0., 1., 1., 0., 0., 0., 1., 0., 0.],
[ 0., 3., 1.,50.,50., 2., 1., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 0., 1., 1., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.]]
Drugą rzeczą, którą musisz zrobić, to napisać niektóre informacje dla każdego wiersza w oparciu o którym zakresy wartości są dodatnie. Na przykład używając mojej zmienionej tablicy, muszę być w stanie wypisać jedną instrukcję dla trzeciego rzędu, deklarując dodatnie liczby całkowite dla col [1: 7] i dwie instrukcje dla czwartego rzędu, deklarując dodatnie liczby całkowite w col [1: 3] i col [6].
Udało mi się wykorzystać metody numpy wektorowe do punktu, aby walczyć z pierwszym zadaniem, ale wciąż kończyło się odwoływaniem do pętli zarówno w kolumnach jak i wierszach (aczkolwiek w podzbiorze całej tablicy). W przeciwnym razie zastępuję wszystkie zera w danym wierszu, a nie tylko te między wartościami dodatnimi.
Ale drugie zadanie nie wydaje się znaleźć sposób to zrobić bez rowerze przez cały tablicy przy użyciu
for col in arr:
for row in arr:
Chyba moje ogólne pytanie byłoby, czy istnieje sposób, aby korzystanie z metody wektorowe w numpy, aby zdefiniować zakresy indeksów kolumn, które będą się różnić dla każdego wiersza i będą zależeć od wartości w poniższej kolumnie?
Każda pomoc będzie mile widziana.
Dziękuję za odpowiedź, ale to nadal wymaga użycia pętli do przechodzenia przez każdą kolumnę i wiersz, co jest dokładnie tym, czego staram się unikać. Moje tablice są duże i zajmuje to dużo czasu. Mam nadzieję, że jest sposób, w jaki mogę to zrobić za pomocą wbudowanych funkcji, które nie wymagają przechodzenia przez macierz. –
W jaki sposób tworzysz tablice? Można technicznie utworzyć listę obiektów zawierających indeksy, wartość i to, czy jest dodatnia. Następnie możesz użyć forloop, aby pobrać i zwrócić wszystkie, które chcesz. Czas tego rozwiązania będzie wynosił O (N). Zakładając, że nie używasz wbudowanego forloop do tworzenia tablic w pierwszej kolejności. – blaqksilhouette
Tworzenie macierzy odbywa się całkowicie niezależnie, ale w rzeczywistości stanowią one rodzaj maski dla rzeczywistych danych przechowywanych w osobnej tablicy o tym samym kształcie. –