2011-03-08 43 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