我需要你的帮助。我想遍历三维数组,并在一个方向上检查两个元素之间的距离,如果较小,则该值应为True。一旦距离大于某个特定值,该维度中的其余值应设置为False。
以下是一维示例:
a = np.array([1,2,2,1,2,5,2,7,1,2])
b = magic_check_fct(a, threshold=3, axis=0)
print(b)
# The expected output is :
> b = [True, True, True, True, True, False, False, False, False, False]
为进行简单检查,使用a <= threshold
的结果应该是预期的输出,而不是预期的输出:
> b = [True, True, True, True, True, False, True, False, True, True]
使用numpy是否有一种有效的方法?这件事对性能至关重要。
感谢您的帮助!
答案 0 :(得分:3)
一种方法是沿该轴使用np.minimum.accumulate
-
np.minimum.accumulate(a<=threshold,axis=0)
样品运行-
In [515]: a
Out[515]: array([1, 2, 2, 1, 2, 5, 2, 7, 1, 2])
In [516]: threshold = 3
In [518]: print np.minimum.accumulate(a<=threshold,axis=0)
[ True True True True True False False False False False]
另一个具有阈值,然后切片的1D
数组-
out = a<=threshold
if ~out.all():
out[out.argmin():] = 0
答案 1 :(得分:0)
这是使用1st discrete difference
的另一种方法:
In [126]: threshold = 3
In [127]: mask = np.diff(a, prepend=a[0]) < threshold
In [128]: mask[mask.argmin():] = False
In [129]: mask
Out[129]:
array([ True, True, True, True, True, False, False, False, False,
False])