【发布时间】:2020-10-20 21:44:25
【问题描述】:
我必须连续运行如下所示的 sn-p 大约 200000 次,并且 sn-p 需要大约 0.12585 秒来进行 1000 次迭代。数据点的形状为 (3, 2704, 64)
output = []
maxium = 0
for datapoint in datapoints:
tmp = []
for data in datapoint:
maxium = max(data)
if maxium == 0:
tmp.append(data)
else:
tmp.append(data / maxium)
output.append(tmp)
我尝试使用 map() 重写它,但这给了我每次迭代平均 0.23237 秒的时间。这可能是由于多次调用 max(y) 和 list() 造成的。
np.asarray(list(map(lambda datapoint: list(map(lambda data: data / max(data) if max(data) > 0 else y, datapoint)), datapoints)))
是否有可能再次优化代码以提高性能?
【问题讨论】:
-
对不起,我删除了我的评论,所以你的评论现在没有多大意义!在我提出之后,我注意到你使用了
np.asarray。我添加了 numpy 标记,因为该解决方案肯定会涉及 numpy 的矢量化操作,而不是 Python for 循环或map()。 -
我希望解决方案涉及
numpy.amax()函数。
标签: python performance numpy for-loop