考虑以下矩阵:
[[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)使我的工作更轻松?
答案 0 :(得分:2)
类似的事情可能起作用:
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
请注意min
内部的max
和range
函数,这些函数会处理矩阵的边界。
并且由于python bool
是int
的子类,因此True
和False
可以强制转换为int
。