có cách nào để có tham chiếu đến mảng chéo không? Tôi muốn mảng của tôi đường chéo để được chia bởi một yếu tố nào đó Cảm ơnNumpy sửa đổi đường chéo ndarray
10
A
Trả lời
16
Nếu X
là mảng của bạn và c
là yếu tố,
X[np.diag_indices_from(X)] /= c
Xem diag_indices_from
trong cuốn hướng dẫn NumPy.
14
Một cách nhanh chóng để truy cập đường chéo của một mảng NumPy vuông (n,n)
là với 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
Chức năng np.fill_diagonal
khá nhanh:
np.fill_diagonal(a, a.diagonal()/c)
nơi a
là mảng của bạn và c
là yếu tố của bạn. Trên máy tính của tôi, phương pháp này nhanh như phương pháp của @ kwgoodman a.flat[::n+1] /= c
, và theo ý kiến của tôi một chút rõ ràng hơn (nhưng không phải là bóng bẩy).
3
So sánh 3 phương pháp trên:
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]
Vì vậy, bạn có thể thấy rằng phương pháp np.flat
là nhanh nhất nhưng nhẹ. Khi tôi chạy điều này trong một vài lần có lần khi phương pháp fill_diagonal
nhanh hơn một chút. Nhưng khả năng đọc khôn ngoan của nó có thể có giá trị bằng cách sử dụng phương thức fill_diagonal.
Các vấn đề liên quan
- 1. Toán tử Ternary cho NumPy ndarray?
- 2. sử dụng numpy trong cython: xác định ndarray datatype/ndims
- 3. Lấy tên cột của một ndarray python NumPy
- 4. thay đổi các giá trị của đường chéo của ma trận ở dạng khối u
- 5. nhận được đường chéo đối diện của mảng numpy
- 6. làm thế nào để biến một CvMat OpenCV trở lại ndarray trong NumPy
- 7. Làm thế nào để tìm các giá trị thường xuyên nhất trong ndarray numpy?
- 8. Hãy đường chéo ngược trắng trong Heatmap
- 9. Làm thế nào để chuyển đổi ndarray thành mảng?
- 10. Thay đổi đường chéo của ma trận bằng Mathematica
- 11. Tương quan chéo chức năng không định kỳ với NumPy
- 12. chéo sản phẩm của một vector trong NumPy
- 13. Đường ray: sửa đổi thông số biểu mẫu trước khi sửa đổi cơ sở dữ liệu
- 14. Có chức năng "bounding box" (slice với giá trị khác 0) cho một ndarray trong NumPy không?
- 15. ProgressBar Theme với đường chéo trang trí
- 16. Giữ một phân lớp ndarray numpy là giá trị trả về trong quá trình chuyển đổi. An toàn để đặt __array_priority__?
- 17. svn copy -r [số sửa đổi] [url] [đường dẫn]
- 18. Đường ray: kiểm tra các trường đã sửa đổi
- 19. Sửa đổi Đường dẫn Python cho Python3 chỉ
- 20. Sửa đổi tệp bằng trình tạo đường ray
- 21. Sửa đổi BaseController trong đường ray ActiveAdmin gem
- 22. Đường ranh giới đường chéo linh hoạt trong R
- 23. Sửa đường dẫn '../../' trong python
- 24. Đường viền cong của trình duyệt chéo
- 25. Matrix với cặp đường chéo của
- 26. numpy: ndenumerate cho mảng bị che khuất?
- 27. nhanh chuyển đổi IplImage để mảng NumPy
- 28. Chuyển đổi mảng NumPy thành cvMat cv2
- 29. Chuyển đổi mảng numpy thành tuple
- 30. chuyển đổi ma trận thành một vectơ dọc theo đường chéo của nó