Trong khi chơi đùa với this question tôi nhận thấy một cái gì đó tôi không thể giải thích liên quan đến việc thực hiện tương đối của np.log2
, np.log
và np.log10
:Tại sao log2 và log1p nhanh hơn rất nhiều so với nhật ký và log10?
In [1]: %%timeit x = np.random.rand(100000)
....: np.log2(x)
....:
1000 loops, best of 3: 1.31 ms per loop
In [2]: %%timeit x = np.random.rand(100000)
np.log(x)
....:
100 loops, best of 3: 3.64 ms per loop
In [3]: %%timeit x = np.random.rand(100000)
np.log10(x)
....:
100 loops, best of 3: 3.93 ms per loop
np.log2
khoảng 3x nhanh hơn np.log
và np.log10
. Có lẽ thậm chí nhiều hơn phản trực giác, np.log1p(x)
, mà tính ln (x + 1), là ngang bằng với np.log2
:
In [4]: %%timeit x = np.random.rand(100000)
np.log1p(x)
....:
1000 loops, best of 3: 1.46 ms per loop
tôi đắc gần như giống hệt nhau trong timings v1.10.1 NumPy và v1.8.2.
Có giải thích trực quan về những khác biệt này trong hiệu suất thời gian chạy không?
[câu trả lời này] (http://math.stackexchange.com/a/61236/277288) trong toán SE có vẻ như nói rằng một số phương thức giảm bằng 'log2' để tính toán bất kỳ nhật ký nào. điều này có nghĩa là việc thực hiện các hàm log của np phụ thuộc, theo cách này hay cách khác, trên log2 và/hoặc ln (x + 1). Tôi nghĩ rằng điều này đã làm với loạt taylor của cả hai người trong số họ cũng là –
Đây là một quan sát rất thú vị. Tôi không có nghĩa là một chuyên gia trong việc thực hiện cấp thấp các thói quen tính toán hiệu quả. Trực giác tôi đoán rằng điều này liên quan đến thực tế là tất cả logarit đều liên quan đến khái niệm. Nếu bạn biết một, bạn về cơ bản biết tất cả chúng bằng cách biến đổi đơn giản. Vì vậy, tại một số điểm bạn phải quyết định cái nào có thể được tính toán hiệu quả trên một bộ xử lý. Tính toán những người khác thông qua chuyển đổi sau đó rõ ràng sẽ mất một ít thời gian hơn. Nhưng tôi rất thích nhìn thấy một câu trả lời của chuyên gia ở đây. – cel
Có lẽ vì dữ liệu nhị phân là cơ sở 2, có một số thủ thuật tối ưu hóa có sẵn với log2 – wim