脾气暴躁的逻辑和

玻尔兹曼脑

我有布尔数组A和B,并且想要得到C。C就像A和B的逻辑与,但是在匹配索引上有一些回旋余地。也就是说,逻辑与将执行A [r,c] AND B [r,c],但我想要的是A [r +/- 1,c +/- 1] AND B [r +/- 1 ,c +/- 1]。有没有一个好的方法来做到这一点,理想情况下无需遍历每个索引?

>>> import numpy as np
>>> A
np.ndarray([[True, False, False, True],
           [False, False, False, False],
           [False, False, True, False],
           [False, False, False, False])
>>> B
np.ndarray([[False, True, False, False],
           [False, False, False, False],
           [True, True, True, False],
           [False, False, False, False])
>>> np.logical_and(A, B)  # only (2,2) is True
np.ndarray([[False, False, False, False],
           [False, False, False, False],
           [False, False, True, False],
           [False, False, False, False])
>>> C  # (0,0), (1,0), and (2,1) also become True
np.ndarray([[True, False, False, False],
           [True, False, False, False],
           [False, True, True, False],
           [False, False, False, False])
艾伦

如果我正确理解,由于复制了@ AetherUnbound,A [r +/- 1,c +/- 1]和B [r +/- 1,c +/- 1]将产生以下结果。

[[ True  True  True False]
 [ True  True  True  True]
 [False  True  True  True]
 [False  True  True  True]]

如果这是所需的输出,我们可以对a和b使用卷积运算,最后进行逻辑与。

from scipy import ndimage
#define a convolution filter with size 3*3
f = np.full((3,3),True, dtype=bool)

#Convolve A and B using a 3*3 filter and then do a logical and in the end.
np.logical_and(ndimage.convolve(A,f,mode='constant', cval=False),ndimage.convolve(B,f,mode='constant', cval=False))
Out[766]: 
array([[ True,  True,  True, False],
       [ True,  True,  True,  True],
       [False,  True,  True,  True],
       [False,  True,  True,  True]], dtype=bool)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章