在python中检查矩阵中close-by元素的值
考虑以下矩阵:在python中检查矩阵中close-by元素的值,python,python-3.x,matrix,Python,Python 3.x,Matrix,考虑以下矩阵: [[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,(elemen
[[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的顺序并不重要,只是它们的数量而已)。我一直在尝试使用一些算法来实现这一点,但首先需要花费大量时间,因为每个项目附近的元素不同,使用(例如)循环变得非常棘手,其次执行时间会变得非常长。我的问题是,是否有任何库或方法(如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
注意范围
s中负责矩阵边界的min
和max
函数
由于python
bool
s是int
的子类,因此True
和False
可以强制转换为int
,[0][1]
-元素的len([1,0,0,0,1,0])=6
周围的元素?为什么呢请提供一个复制你的问题的例子。@HiroProgator谢谢你注意到这一点,我编辑了我的问题