我想将某个阈值内的巨大 python ndarray 的值替换为 0。比如在 [-0.1 和 0.1]
的阈值内。什么是最有效的方法?这是一个相当大的数组:
>>>np.shape(np_w)
shape=(1, 1, 1024, 1024) dtype=float32
我知道我们这里没有 Matlab 的 ismember
,但是,搜索 numpy 文档,我找到了 np.in1d
和 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
最佳答案
如果是围绕0
的对称区间你可以使用 abs
和 <
和 boolean array indexing (类似于 integer array indexing,但在这种情况下,您不需要条件周围的 np.where
):
my_np[abs(my_np) <= treshhold] = 0
这将用 0
替换所有绝对值小于或等于阈值的值.
如果您需要更通用的解决方案,比如阈值下限的绝对值不等于阈值上限,那么您可以使用 &
组合表达式:
my_np[(my_np >= lower_treshhold) & (my_np <= upper_threshhold)] = 0
关于python - 替换满足特定阈值的python ndarray的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46333375/