如何为Numpy数组中的每个项目设置最小值和最大值?

时间:2019-03-08 15:22:18

标签: arrays python-3.x numpy

假设我有一个numpy数组

a = np.array([1, 100, 123, -400, 85, -98])

我想将每个值限制在-10090之间。所以基本上,我希望numpy数组像这样:

a = np.array([1, 90, 90, -100, 85, -98])

我知道这可以通过遍历numpy数组来完成,但是还有其他有效的方法可以执行此任务吗?

2 个答案:

答案 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次,我得到的平均是从最佳到最差的:

  1. 4.8e-3秒用于列表理解
  2. 2.7e-1秒用于numpy数组比较
  3. np.clip功能的时间为1.8e-1秒

很显然,如果事后不需要数组,则列表理解是必经之路。而且,如果您需要数组,则直接比较的效率几乎是clip函数的两倍,而且可读性更高。