是否有任何方式在numpy中獲得對數組對角線的引用? 我希望我的陣列對角線按一定因素分 感謝Numpy修改ndarray對角線
10
A
回答
16
14
一個快速的方法來訪問對角方形(n,n)
numpy的數組是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
的np.fill_diagonal
功能是相當快的:
np.fill_diagonal(a, a.diagonal()/c)
其中a
是您的陣列和c
是你的因素。在我的機器上,這種方法與@ kwgoodman的a.flat[::n+1] /= c
方法一樣快,在我看來有點清晰(但不是光滑的)。
3
比較上述3種方法:
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]
所以你可以看到,np.flat
方法是最快的,但是很小。當我再次運行這幾次時,有時候fill_diagonal
方法稍微快一點。但可讀性明智的可能值得使用fill_diagonal方法。
相關問題
- 1. 在Python中獲取角落值numpy ndarray
- 2. 在numpy的ndarray
- 3. Numpy NdArray Memoization
- 4. 內numpy的ndarray
- 5. 在Python(numpy)中修改ndarray的正確方法是什麼?
- 6. 如何沿軸線平坦numpy ndarray?
- 7. numpy數組到ndarray
- 8. numpy的ndarray乘法
- 9. subclassing numpy ndarray問題
- 10. 的Python NumPy的ndarray
- 11. NumPy ndarray.all()與np.all(ndarray)vs all(ndarray)
- 12. 逆轉numpy的蟒蛇對角線
- 13. 在numpy中對角線堆疊?
- 14. 獲取對角線而不使用numpy?
- 15. 2D numpy數組的上對角線
- 16. 如何從numpy ndarrays創建numpy ndarray?
- 17. 在numpy中更改矩陣對角線的值
- 18. 修改角陣對象onload
- 19. numpy ndarray切片和迭代
- 20. 替換numpy ndarray中的值
- 21. Numpy ndarray與陣列切片
- 22. numpy ndarray高級索引
- 23. 在numpy的ndarray(Python)的
- 24. 正常化numpy ndarray數據
- 25. 我如何從numpy的ndarray
- 26. 最大奇異值NumPy`ndarray`
- 27. Numpy/Scipy:如何重建ndarray?
- 28. numpy ndarray的查找索引
- 29. 從給定的numpy數組創建塊對角線numpy陣列
- 30. numpy中是否有函數替換numpy數組的低對角線值和高對角線值?