Załóżmy, że mam tablicę numpy:
data = np.array([[1,1,1],[2,2,2],[3,3,3]])
i mam odpowiedni „wektor”:
vector = np.array([1,2,3])
Jak operować data
wzdłuż każdego wiersza, aby odjąć lub podzielić, aby wynik był następujący:
sub_result = [[0,0,0], [0,0,0], [0,0,0]]
div_result = [[1,1,1], [1,1,1], [1,1,1]]
Krótko mówiąc: jak wykonać operację na każdym wierszu tablicy 2D z tablicą skalarną 1D, która odpowiada każdemu wierszowi?
None
nadal działa równoważnie znp.newaxis
. Nie jestem pewien, jaka jest Twoja konfiguracja ani jaki jest konkretny problem, ale odpowiedź jest nadal aktualna.Jak już wspomniano, krojenie z
None
lub z użyciemnp.newaxes
jest świetnym sposobem na zrobienie tego. Inną alternatywą jest użycie transpozycji i nadawania, jak wi
W przypadku tablic o wyższych wymiarach możesz chcieć użyć
swapaxes
metody tablic NumPy lubrollaxis
funkcji NumPy . Naprawdę można to zrobić na wiele sposobów.Pełniejsze wyjaśnienie nadawania można znaleźć pod adresem http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
źródło
Rozwiązanie JoshAdel wykorzystuje np.newaxis, aby dodać wymiar. Alternatywą jest użycie reshape () do wyrównania wymiarów w ramach przygotowań do nadawania .
Wykonanie reshape () umożliwia wyrównanie wymiarów do nadawania:
Zauważ, że
data/vector
jest to w porządku, ale nie daje Ci odpowiedzi, której chcesz. Dzieli każdą kolumnę zarray
(a nie dla każdego rzędu ) w każdym odpowiednim elementemvector
. To jest to, co byś uzyskał, gdybyś wyraźnie przekształciłvector
się w1x3
zamiast3x1
.źródło
Pythonowym sposobem na to jest ...
To zajmuje się przekształcaniem, a także wyniki są w formacie zmiennoprzecinkowym. W innych odpowiedziach wyniki są w zaokrąglonych liczbach całkowitych.
# UWAGA: liczba kolumn w obu danych i wektorze powinna być zgodna
źródło
Dodając do odpowiedzi stackoverflowuser2010, w ogólnym przypadku możesz po prostu użyć
To zmieni twój wektor w
column matrix/vector
. Umożliwiając wykonywanie podstawowych operacji, jak chcesz. Przynajmniej dla mnie jest to najbardziej intuicyjny sposób postępowania, a ponieważ (w większości przypadków) numpy po prostu użyje widoku tej samej pamięci wewnętrznej do zmiany kształtu, również jest wydajna.źródło
.reshape(-1,1)
jest najbardziej intuicyjnym sposobem korzystania z nadawania.