jest jakiś sposób w numpy, aby uzyskać odniesienie do przekątnej tablicy? Chcę moja macierz diagonalna należy podzielić przez pewien czynnik DziękiNumpy zmodyfikować przekątną ndarray
10
A
Odpowiedz
16
Jeśli X
to tablica i c
jest czynnikiem,
X[np.diag_indices_from(X)] /= c
Zobacz diag_indices_from
w instrukcji NumPy.
14
Szybkim sposobem dostępu przekątnej kwadratu (n,n)
numpy tablicy jest z arr.flat[::n+1]
:
n = 1000
c = 20
a = np.random.rand(n,n)
a[np.diag_indices_from(a)] /= C# 119 microseconds
a.flat[::n+1] /= C# 25.3 microseconds
4
Funkcja np.fill_diagonal
jest dość szybki:
np.fill_diagonal(a, a.diagonal()/c)
gdzie a
to tablica i c
jest twój czynnik. Na mojej maszynie ta metoda była tak szybka jak metoda @ kwgoodmana a.flat[::n+1] /= c
i, moim zdaniem, nieco jaśniejsza (ale nie tak łatwa).
3
Porównując powyższe 3 metody:
import numpy as np
import timeit
n = 1000
c = 20
a = np.random.rand(n,n)
a1 = a.copy()
a2 = a.copy()
a3 = a.copy()
t1 = np.zeros(1000)
t2 = np.zeros(1000)
t3 = np.zeros(1000)
for i in range(1000):
start = timeit.default_timer()
a1[np.diag_indices_from(a1)] /= c
stop = timeit.default_timer()
t1[i] = start-stop
start = timeit.default_timer()
a2.flat[::n+1] /= c
stop = timeit.default_timer()
t2[i] = start-stop
start = timeit.default_timer()
np.fill_diagonal(a3,a3.diagonal()/c)
stop = timeit.default_timer()
t3[i] = start-stop
print([t1.mean(), t1.std()])
print([t2.mean(), t2.std()])
print([t3.mean(), t3.std()])
[-4.5693619907979154e-05, 9.3142851395411316e-06]
[-2.338075107036275e-05, 6.7119609571872443e-06]
[-2.3731951987429056e-05, 8.0455946813059586e-06]
Więc widać, że metoda np.flat
jest najszybszy, ale nieznacznie. Kiedy uruchamiałem to jeszcze kilka razy, zdarzały się momenty, gdy metoda fill_diagonal
była nieco szybsza. Ale czytelność mądra jest prawdopodobnie warta użycia metody fill_diagonal.
Powiązane problemy
- 1. Ternary operator dla NumPy ndarray?
- 2. Ile pamięci zużywa numpy ndarray?
- 3. Jak znaleźć najczęstsze wartości w numpy ndarray?
- 4. Jak wyeksportować numpy ndarray do zmiennej łańcuchowej?
- 5. Programowo dodawać nazwy kolumn do numpy ndarray
- 6. Get nazwy kolumn o ndarray python numpy
- 7. python numpy ndarray element-mądry oznacza
- 8. Multiply numpy ndarray z tablicą 1d wzdłuż danej osi
- 9. Jaka jest różnica między ndarray a tablicą w numpy?
- 10. Uzyskaj przekątną macierzy w TensorFlow
- 11. Umieszczanie numdowych danych ndarray w pandach
- 12. Tensorflow: Jak zmodyfikować wartość w tensorze
- 13. jak zmodyfikować tablicę 2D numpy w określonych lokalizacjach bez pętli?
- 14. python numpy: jak zbudować dużą przekątną macierzy (matrix) z dwóch małych tablicy
- 15. (Python) Jak uzyskać przekątną (A * B) bez wykonywania A * B?
- 16. Odwróć dowolny wymiar w ndarray
- 17. Czy istnieje funkcja "ramki ograniczającej" (wycinek o wartościach niezerowych) dla ndarray w NumPy?
- 18. Ustaw przekątną macierzy na zero w R
- 19. Jak ustawić przekątną NSWindow tylko w pionie?
- 20. Jak utworzyć przekątną w trybie React Native?
- 21. Jak zadeklarować ndarray w cytoncie z ogólnym zmiennoprzecinkowym typem
- 22. numpy: ndenumerate dla zamaskowanych tablic?
- 23. Jak zmienić typ numpy recarray?
- 24. Uzyskanie przeciwległej przekątnej tablicy numpy
- 25. Zastępstwo dla radiofonii numpy wykorzystaniem scipy.sparse.csc_matrix
- 26. Numpy AttributeError: „pływak” obiekt ma atrybut „exp”
- 27. Python/NumPy Pierwsze wystąpienie podwielokrotności
- 28. normalizować numpy tablice z różnych „obraz” obiekty
- 29. Jak zmodyfikować zawartość XElement?
- 30. Jak zmodyfikować nagłówek HttpUrlConnection