Diyagonal diziye referans almak için numpy'de herhangi bir yol var mı? Ben diyagonal benim dizisi belli faktörle TeşekkürNumpy ndarray köşegenini değiştir
10
A
cevap
16
X
sizin dizidir ve c
faktör ise,
X[np.diag_indices_from(X)] /= c
Numpy kılavuzunda
diag_indices_from
gör bölünecek istiyorum.
14
kare (n,n)
numpy dizinin köşegen erişmek için hızlı bir yolu arr.flat[::n+1]
ile geçerli:
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
np.fill_diagonal
fonksiyonu oldukça hızlıdır: a
diziniz ve c
olduğunu
np.fill_diagonal(a, a.diagonal()/c)
olduğunu senin faktörü. Makinemde, bu yöntem @ kwgoodman'ın a.flat[::n+1] /= c
yöntemi kadar hızlıydı ve benim düşünceme göre biraz daha net (ama kaygan değil).
3
karşılaştırılması yukarıdaki 3 yöntem:
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]
Yani np.flat
yöntem marjinal hızlı ama olduğunu görebilirsiniz. Bunu birkaç kez daha çalıştırdığımda, fill_diagonal
yönteminin biraz daha hızlı olduğu zamanlar vardı. Ancak okunabilirlik, muhtemelen fill_diagonal yöntemini kullanmaya değer.
İlgili konular
- 1. Numpy NdArray Memoization
- 2. NumPy ndarray için üçlü operatör?
- 3. bir piton numpy ndarray sütun isimlerini alın
- 4. normalleştirmek numpy diziler
- 5. Ndarray içinde sayı katmanı toplamı nasıl bulunur?
- 6. NumPy
- 7. Numpy
- 8. NumPy
- 9. Numpy
- 10. Octave'de bir matris ürününün yalnızca köşegenini nasıl hesaplanır?
- 11. Bir adet numpy dizi türleri nasıl sarılır? Ben numpy dizi taban türünü uzanan bir sınıf yapmak istiyorum
- 12. Python numpy dizisinde boş boyut nasıl anlaşılır?
- 13. Numpy AttributeError: 'şamandıra' nesne hiçbir özellik 'exp' İşte
- 14. Temayı değiştir Temayı değiştir Temayı değiştir
- 15. tkinter: değiştir değiştir
- 16. TensorFlow - numpy benzeri tensör indeksleme Numpy olarak
- 17. Python/Numpy
- 18. Python Numpy
- 19. python numpy
- 20. numpy analogu?
- 21. numpy: (n, 1) dizisine cast (n,) dizisine sözdizimi/deyim mi?
- 22. cython.parallel: iş parçacığı yerel ndarray arabelleği nasıl başlatılır?
- 23. işlemek için bazı zarif bir yolu var mı benim ndarray
- 24. Destek Vektör Makineleri için bir ndarray yeniden şekillendirme
- 25. JS dizesinde çalışma değiştir değiştir
- 26. numpy: operatörü ile - ben numpy diziye koymak numaralarının listesi Hiçbiri
- 27. bir NumPy diziden değerleri Şöyle bir NumPy dizi var
- 28. python3-numpy: Bir dosyaya numpy savetxt kullanarak ekleme
- 29. Windows + Virtualenv + pip + NumPy (sorunlar numpy yüklerken) Windows'ta
- 30. Tepki - 'enter' tuşunu değiştir değiştir olayına basın