我有一个整数d和布尔数组
M = array([[ True, False, False, True],
[False, True, False, False],
[False, False, False, False],
[False, False, False, True]])
现在我想用以下规则从M创建一个新数组:True保持不变,True左边的下一个d位置也变为True。我想到了这个
newarray = np.full_like(M,False)
for r,row in enumerate(M[1:],1):
for i,boo in enumerate(row):
if boo:
newarray[max(0,r-d):r,i] = True
我觉得有一种更有效的方法可以使用numpy命令来实现这一点;可能使用np. where。
编辑:例如d = 1,结果应为
M = array([[ True, False, True, True],
[ True, True, False, False],
[False, False, False, False],
[False, False, True, True]])
对于d = 2,结果应为
M = array([[ True, True, True, True],
[ True, True, False, False],
[False, False, False, False],
[False, True, True, True]])
2条答案
按热度按时间lnxxn5zx1#
您可以使用
scipy.signal.convolve2d
的2D卷积:d = 1
的输出:d = 2
的输出:x7rlezfr2#
类似于@mozway,但使用numpy的
sliding_window_view
和pad
:输出: