替换满足特定阈值的python数据数组的值

替换满足特定阈值的python数据数组的值,python,python-2.7,numpy,where,Python,Python 2.7,Numpy,Where,我希望将某个阈值内的大型python ndarray的值替换为0。假设在[-0.1和0.1]的阈值范围内。最有效的方法是什么?这是一个相当大的阵列: >>>np.shape(np_w) shape=(1, 1, 1024, 1024) dtype=float32 我知道这里没有Matlab的ismember,但是,在搜索numpy文档时,我发现np.inad和np.isin。到目前为止,我的解决方案看起来既不好也不慢: import numpy as np Threshhol

我希望将某个阈值内的大型python ndarray的值替换为0。假设在
[-0.1和0.1]
的阈值范围内。最有效的方法是什么?这是一个相当大的阵列:

>>>np.shape(np_w)
shape=(1, 1, 1024, 1024) dtype=float32
我知道这里没有Matlab的
ismember
,但是,在搜索numpy文档时,我发现
np.inad
np.isin
。到目前为止,我的解决方案看起来既不好也不慢:

import numpy as np
Threshhold=X

res=np.isin(np_w,np_w[(np_w>=-Threshhold) & (np_w<=Threshhold)])
indicesToReplace=np.where(res)
np_w[indicesToReplace]=0
将numpy导入为np
阈值=X

res=np.isin(np_w,np_w[(np_w>=-threshold)&(np_w)我个人会使用和的组合


就我个人而言,我会使用和的组合


如果它是
0
附近的对称区间,你可以使用
abs
如果它是
0
附近的对称区间,你可以使用
abs
谢谢,@mseifer。所以基本上你的方法只是一条直线?不需要
np.isin
,对吗?与wha相比,这是非常缓慢的对于我的方法,我首先找到索引,然后用新的值替换它们。我会说是10xslower@Amir
np\u w
my\u np
?更新(编辑)是有意义的问题。谢谢,@MSeifert。所以基本上你的方法只是一条线性线?不需要
np.isin
,对吗?不幸的是,这非常慢?与我的方法相比,我先找到索引,然后用新值替换。我会说是10倍slower@Amir
np\u w
my\u np
?如果更新(编辑)问题。
>>> import numpy as np
>>> threshold = 0.5
>>> my_arr = np.random.randn(20)
>>> my_arr
array([-0.28094279,  1.28432282,  0.2585762 ,  0.41902366,  1.21350506,
       -0.40586786, -1.04135578, -1.06168061,  0.25554365, -0.75404457,
        1.4755498 , -0.14902854,  0.15225808,  0.03667505,  0.6158351 ,
        0.05171262,  1.09116325, -0.5897306 , -0.69801693, -0.31560829,
       -0.36665813, -0.98115761,  1.21050881,  0.66356061, -0.03960144])
>>> my_arr[np.where(np.logical_and(np.greater(my_arr, -threshold), np.less(my_arr, threshold)))[0]] = np.nan
>>> my_arr
array([        nan,  1.28432282,         nan,         nan,  1.21350506,
               nan, -1.04135578, -1.06168061,         nan, -0.75404457,
        1.4755498 ,         nan,         nan,         nan,  0.6158351 ,
               nan,  1.09116325, -0.5897306 , -0.69801693,         nan,
               nan, -0.98115761,  1.21050881,  0.66356061,         nan])
my_np[abs(my_np) <= treshhold] = 0
my_np[(my_np >= lower_treshhold) & (my_np <= upper_threshhold)] = 0