考虑以下矩阵:
[[true,false,false,true],
[false,false,true,false],
[true,true,false,true]]
我希望python检查每个元素附近的元素的值。例如,[0][0] 元素为 true,它周围的三个元素为 false,因此它应该返回类似 [0,0,0] 的东西。
(element),false
false,false
对于 [0][1] 元素,结果应为 [1,0,0,1,0]:
true,(element),false
false,false,true
等等(0 和 1 的顺序并不重要,只是它们的数量(。我一直在尝试使用一些算法来做到这一点,但首先需要很多时间,因为每个项目附近的元素各不相同,并且使用(for,while(循环变得非常棘手,其次执行时间会变得很长。我的问题是,是否有任何库或方法(例如numpy(可以使我的工作更轻松?
这样的东西可能会起作用:
mat = [[True, False, False, True],
[False, False, True, False],
[True, True, False, True]]
max_i = len(mat)
max_j = len(mat[0])
def surrounding(i, j):
ret = []
for ii in range(max(0, i-1), min(i+2, max_i)):
for jj in range(max(0, j-1), min(j+2, max_j)):
if (ii, jj) == (i, j):
continue
ret.append(int(mat[ii][jj]))
return ret
请注意range
中的min
和max
函数,它们负责处理矩阵的边界。
由于 Pythonbool
无论如何都是int
的子类,因此True
和False
可以转换为int
。