我看不出有什麼不對這個
>> import numpy as np
>> a = np.array([[[0, 0, 0, 2],[0, 0, 0, 0], [1, 0, 0, 0], [0, 0, 0, 0]], [[0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0] ,[0, 1, 1, 0]] ,[[0, 0, 0, 0], [0, 1, 1, 0] ,[0, 0, 1, 0] ,[0, 0, 0, 0]]])
>> a
[[[0, 0, 0, 2], [0, 0, 0, 0], [1, 0, 0, 0], [0, 0, 0, 0]],
[[0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 1, 1, 0]],
[[0, 0, 0, 0], [0, 1, 1, 0], [0, 0, 1, 0], [0, 0, 0, 0]]]
>> np.log(a/0.25)
array([[[ -inf, -inf, -inf, 2.07944154],
[ -inf, -inf, -inf, -inf],
[ 1.38629436, -inf, -inf, -inf],
[ -inf, -inf, -inf, -inf]],
[[ -inf, 1.38629436, -inf, -inf],
[ -inf, -inf, -inf, -inf],
[ -inf, -inf, -inf, -inf],
[ -inf, 1.38629436, 1.38629436, -inf]],
[[ -inf, -inf, -inf, -inf],
[ -inf, 1.38629436, 1.38629436, -inf],
[ -inf, -inf, 1.38629436, -inf],
[ -inf, -inf, -inf, -inf]]])
從過早的微優化部門,'np.log(yourNumpyArray) - np.log(0.25)'給出了相同的結果,但替代價格昂貴的分歧通過廉價的減法。我的系統速度大概快10%。 – Jaime
@Jaime很奇怪,在我的系統中,情況正好相反:>>>%timeit np.log(a/0.25)'給出了'100000個循環,最好每個循環3:8.99μs'和 >>> %timeit np.log(a) - np.log(0.25)'導致: '100000個循環,最好3個:每個循環10.3μs(稍微慢一些) – elias
我在一個大的(1000x1000)陣列上運行它。由於在OP的問題中只有少量內容,對'np.log'的額外調用可能會讓所有的改進都吃光。在我的系統上,交叉發生在陣列中約800個項目。 – Jaime