【发布时间】:2019-10-05 16:54:30
【问题描述】:
我写了一个阈值函数 TH(arr, threshold),它接受向量 [u,v] 的二维数组,如果 u 和 v 的绝对值都低于指定阈值,则将它们设置为 0。
该函数由 2 个 for 循环组成,可以完成这项工作,但需要大量计算(我在大型数据集上运行它)。
例子:
[u, v] --> 输出(阈值 = 1)
[2, 2] --> [2, 2]
[2, .1] --> [2, .1]
[.1,.1] --> [0, 0]
我可以使用哪些其他方法/函数来更有效地解决此问题(使用列表理解或其他方法)?
这里有一些代码:
import numpy as np
import time
start = time.time()
def TH(arr, threshold):
for idx, value in enumerate(arr):
for i, item in enumerate(value):
if np.abs(item[0]) < threshold and np.abs(item[1]) < threshold:
arr[idx][i][0] = 0.0
arr[idx][i][1] = 0.0
return arr
a = np.array([[[.5,.8], [3,4], [3,.1]],
[[0,2], [.5,.5], [.3,3]],
[[.4,.4], [.1,.1], [.5,5]]])
a = TH(a, threshold = 1)
print(a)
end = time.time()
print("Run time: ", end-start)
输出:
[[[0. 0. ]
[3. 4. ]
[3. 0.1]]
[[0. 2. ]
[0. 0. ]
[0.3 3. ]]
[[0. 0. ]
[0. 0. ]
[0.5 5. ]]]
Run time: 0.0009984970092773438
【问题讨论】:
标签: python arrays numpy threshold