2013-01-20 13 views
6

Czy możliwe jest wykonywanie przydziałów minimalnych/maksymalnych w miejscu za pomocą wielowymiarowych macierzy NumPy bez dodatkowej kopii?NumPy minimalne/maksymalne przypisanie na miejscu

Say, a i b są dwie tablice numpy 2D i chciałabym mieć a[i,j] = min(a[i,j], b[i,j]) dla wszystkich i i j.

Jednym ze sposobów, aby to zrobić:

a = numpy.minimum(a, b) 

Ale zgodnie z dokumentacją, numpy.minimum tworzy i zwraca nową tablicę:

numpy.minimum (x1, x2 [spośród])
Elementarne minimum elementów tablicy.
Porównaj dwie tablice i zwraca nową tablicę zawierającą minima elementarne.

Tak więc w powyższym kodzie, stworzy nową tymczasową tablicę (min a i b), a następnie przypisać je do a i wyrzucać go, prawda?

Czy istnieje sposób na zrobienie czegoś takiego jak a.min_with(b), aby min-wynik został ponownie przypisany do a w miejscu?

Odpowiedz

9

numpy.minimum() przyjmuje opcjonalny trzeci argument, który jest tablicą wyjściową. Możesz podać a, aby go zmodyfikować:

In [9]: a = np.array([[1, 2, 3], [2, 2, 2], [3, 2, 1]]) 

In [10]: b = np.array([[3, 2, 1], [1, 2, 1], [1, 2, 1]]) 

In [11]: np.minimum(a, b, a) 
Out[11]: 
array([[1, 2, 1], 
     [1, 2, 1], 
     [1, 2, 1]]) 

In [12]: a 
Out[12]: 
array([[1, 2, 1], 
     [1, 2, 1], 
     [1, 2, 1]]) 
+0

Rzeczywiście zajmuje trzeci parametr. Dzięki! :) – alveko

+0

Poprawiłoby to nieznacznie odpowiedź, aby wydrukować 'id (a)' przed i po. –

+0

@ jwpat7: Nie zawracałam sobie głowy, ponieważ nie ma możliwości, że po prostu wywołanie funkcji może ponownie powiązać "a", wskazując inny obiekt. – NPE

Powiązane problemy