ѕня*_*gнι 9 arrays numpy python-3.x
假设我有一个 numpy 数组
a = np.array([1, 100, 123, -400, 85, -98])
Run Code Online (Sandbox Code Playgroud)
我想限制-100
和之间的每个值90
。所以基本上,我希望 numpy 数组是这样的:
a = np.array([1, 90, 90, -100, 85, -98])
Run Code Online (Sandbox Code Playgroud)
我知道这可以通过迭代 numpy 数组来完成,但是还有其他有效的方法来执行此任务吗?
jea*_*nej 16
有几种方法可以这样做。首先,使用 Sridhar Murali 提出的 numpy 函数:
a = np.array([1, 100, 123, -400, 85, -98])
np.clip(a,-100,90)
Run Code Online (Sandbox Code Playgroud)
其次,使用 numpy 数组比较:
a = np.array([1, 100, 123, -400, 85, -98])
a[a>90] = 90
a[a<-100] = -100
Run Code Online (Sandbox Code Playgroud)
第三,如果您的其余代码不需要 numpy,请使用列表理解:
a = [1, 100, 123, -400, 85, -98]
a = [-100 if x<-100 else 90 if x>90 else x for x in a]
Run Code Online (Sandbox Code Playgroud)
他们都给出了相同的结果:
a = [1, 90, 90, -100, 85, -98]
Run Code Online (Sandbox Code Playgroud)
至于编码风格,我更喜欢 numpy 比较或列表理解,因为它们清楚地说明了做了什么,但这真的取决于你。至于速度,timeit.repeat
在 100000 次重复后,我平均从最好到最差得到:
显然,如果之后不需要数组,则列表理解是要走的路。如果你需要一个数组,直接比较的效率几乎是clip
函数的两倍,同时更具可读性。
归档时间: |
|
查看次数: |
9488 次 |
最近记录: |