2011-03-08 100 views
4

如果我有一个数组,并且我想将值设置为“close”作为该值的某个值,那么执行此操作的最佳方法是什么?我想知道他们是否是一个numpy功能。如果没有numpy功能,那么代码是否低于“最佳”(即最快/最有效)的方式来做到这一点?它也适用于多维数组。Python/Numpy - 在值的某些公差范围内设置值

代码:

from numpy import array 
tol = 1e-5 

# Some array with values close to 0 and 1 
t = array([1.0e-10, -1.0e-10, 1.0+1.0e-10, 1.0-1.0e-10, 5.0]) 
print t[0], t[1], t[2], t[3], t[4] 

# Set values within 'tol' of zero to zero 
t[abs(t) < tol] = 0. 
print t[0], t[1], t[2], t[3], t[4] 

# Set values within 'tol' of some value to that value 
val = 1. 
t[abs(t-val) < tol] = val 
print t[0], t[1], t[2], t[3], t[4] 
+0

我认为这是'数据清理'的最佳方式。我刚才问了一个关于数据清理的类似问题,你的方法就是建议的。 http://stackoverflow.com/questions/4339273/can-i-cleanse-a-numpy-array-without-a-loop – Pete 2011-03-09 17:31:11

回答

3

这不是那么很清楚你想什么来实现的,但我的理解是,around是你的情况的解决方案。

+0

这可能是最接近我想要的。但是,它并不总是做同样的事情。例如,使用上面的代码,我可以将[val-tol,val + tol]范围内的所有值设置为某个值,而不会更改(即四舍五入)数组中的任何其他值。假设我想将区间[-3,3]中的所有值更改为0.0,而不更改[-3,3]范围之外的值,则无法工作。有了这个说法,它的确可以用于小公差,并且可以用于我目前的目的。 – 2011-03-09 00:24:35

+0

@Scott B:你可能只想用满足某些条件的元素来工作。例如L =(-3 eat 2011-03-09 08:29:48