Tôi có danh sách các số phức mà tôi muốn tìm giá trị gần nhất trong danh sách số phức khác.Tìm chỉ mục gần nhất cho một mảng so với tất cả các giá trị trong mảng khác - Python/NumPy
cách tiếp cận hiện tại của tôi với NumPy:
import numpy as np
refArray = np.random.random(16);
myArray = np.random.random(1000);
def find_nearest(array, value):
idx = (np.abs(array-value)).argmin()
return idx;
for value in np.nditer(myArray):
index = find_nearest(refArray, value);
print(index);
Thật không may, điều này có độ tuổi cho một số lượng lớn các giá trị. Có cách nào nhanh hơn hoặc nhiều hơn "pythonian" khớp với mỗi giá trị trong myArray với giá trị gần nhất trong refArray không?
FYI: Tôi không nhất thiết cần phải có mật mã trong tập lệnh của mình.
Quan trọng: thứ tự của cả myArray cũng như refArray là quan trọng và không nên thay đổi. Nếu việc sắp xếp được áp dụng, chỉ mục ban đầu sẽ được giữ lại theo một cách nào đó.
Về mặt thời gian phức tạp, một cửa sổ * trượt * có thể sẽ hiệu quả nhất. –
Tôi không thể thấy cửa sổ trượt hiệu quả hơn so với giải pháp hiện tại. Theo sự hiểu biết tốt nhất của tôi, giải pháp hiện tại là O (n), đó là điều tốt nhất để hy vọng. Sau đó, có một số thương mại để làm, để giảm thiểu thời gian liên tục. Nhưng điều đó phụ thuộc vào thời tiết lớn của bạn là vụ nổ bộ nhớ của bạn hay không. Nếu nó không phải là một vấn đề bộ nhớ, nó có thể có thể đạt được một chút từ việc sử dụng phát sóng và sử dụng nhiều tính toán 'numpy', nhưng điều đó cũng có thể làm chậm bạn xuống nếu bộ nhớ RAM là một vấn đề. – JohanL
@JohanL RAM không phải là một vấn đề, thời gian không may là. Vòng lặp đơn giản này là phương pháp đơn giản nhất nhưng cũng là cách tốt nhất mà tôi có thể nghĩ đến .. Thật không may, với kích thước mảng ref = 64 và giá trị = 200.000 kết hợp mất trên 10 giây, mục tiêu sẽ ở dưới một giây ... – Alexander