假设我有一个numpy数组
a = np.array([1, 100, 123, -400, 85, -98])
我想将每个值限制在-100
和90
之间。所以基本上,我希望numpy数组像这样:
a = np.array([1, 90, 90, -100, 85, -98])
我知道这可以通过遍历numpy数组来完成,但是还有其他有效的方法可以执行此任务吗?
答案 0 :(得分:1)
我认为最简单的方法是使用numpy的clip函数。
import numpy as np
a = np.array([1, 100, 123, -400, 85, -98])
np.clip(a,-100,90)
答案 1 :(得分:1)
有几种方法可以这样做。首先,使用Sridhar Murali提出的numpy函数:
a = np.array([1, 100, 123, -400, 85, -98])
np.clip(a,-100,90)
第二,使用numpy数组比较:
a = np.array([1, 100, 123, -400, 85, -98])
a[a>90] = 90
a[a<-100] = -100
第三,如果其余代码不需要numpy,请使用列表理解:
a = [1, 100, 123, -400, 85, -98]
a = [-100 if x<-100 else 90 if x>90 else x for x in a]
它们都给出相同的结果:
a = [1, 90, 90, -100, 85, -98]
对于编码风格,我更喜欢numpy比较或列表理解,因为它们清楚地说明了已完成的工作,但这取决于您。至于速度,timeit.repeat
重复了100000次,我得到的平均是从最佳到最差的:
很显然,如果事后不需要数组,则列表理解是必经之路。而且,如果您需要数组,则直接比较的效率几乎是clip
函数的两倍,而且可读性更高。