我想比较(可能是多维的)bool
numpy数组中的相邻值,这样如果一行中有相邻的True
值,则只保留最左边的值,而其余的则保留被翻到False
。例如:
Input: [True, False, False, True]
Output: [True, False, False, True]
Input: [True, True, False, True]
Output: [True, False, False, True]
Input: [True, True, True, True]
Output: [True, False, False, False]
在NumPy,SciPy或TensorFlow中是否有一种有效(即矢量化)的方法?
答案 0 :(得分:1)
您可以使用其移位版本计算数组的 logical_and ,如果两者都为真,则翻转值:
a[np.concatenate(([False], a[:-1])) & a] = False
测试:
a = np.array([True, True, True, True])
a[np.concatenate(([False], a[:-1])) & a] = False
a
# array([ True, False, False, False], dtype=bool)
a = np.array([True, True, False, True])
a[np.concatenate(([False], a[:-1])) & a] = False
a
# array([ True, False, False, True], dtype=bool)
a = np.array([True, False, False, True])
a[np.concatenate(([False], a[:-1])) & a] = False
a
# array([ True, False, False, True], dtype=bool)
答案 1 :(得分:1)
对于一维阵列:
a = np.array([True, True, False, True])
b = np.diff(a)
a[1:] = np.logical_and(a[1:], b)
>>> a
array([ True, False, False, True], dtype=bool)
>>>