python - 如何遍历矩阵数组以计算矩阵内特定元素周围的相似元素的数量
问题描述
matrix = [[true, false, false],
[false, true, false],
[false, false, false]]
[1][2] 和 [2][1] 都有 2 个 true 围绕它们。因此该元素位置的计数为 2。其余位置为 1,因为它们被 1 个元素包围。
result = [[0 for x in range(len(matrix[0]))] for y in range(len(matrix))]
for i in range(len(matrix)):
for j in range(len(matrix[0])):
for x in [1,0,-1]:
for y in [1,0,-1]:
if 0<=i+x<len(matrix) and 0<=j+y<len(matrix[0]):
result[i][j]= matrix[i+x][j+y]
return result
这是预期的输出
output= [[1, 2, 1],
[2, 1, 1],
[1, 1, 1]]
但我得到的输出为
[[true,true,false],
[true,true,false],
[false,false,true]]
解决方案
两个问题。第一个发生在你的 for 循环中。您不想计算当前索引,只想对其邻居进行采样,因此您想丢弃x == y == 0
. 通过添加一个 if 语句来做到这一点if x == y == 0: continue
第二个问题是您设置的值不增加它。这在这里:result[i][j]= matrix[i+x][j+y]
仅在True
检测到更多邻居时将值设置为并且不会增加它。而是添加如下:result[i][j] += matrix[i+x][j+y]
通过这两个修复,您可以获得正确的输出:
true = True
false = False
matrix = [[true, false, false],
[false, true, false],
[false, false, false]]
result = [[0 for x in range(len(matrix[0]))] for y in range(len(matrix))]
for i in range(len(matrix)):
for j in range(len(matrix[0])):
for x in [1,0,-1]:
for y in [1,0,-1]:
if x == y == 0: continue
if 0<=i+x<len(matrix) and 0<=j+y<len(matrix[0]):
result[i][j] += matrix[i+x][j+y]
for i in result:
print(i)
输出:
[1, 2, 1]
[2, 1, 1]
[1, 1, 1]
推荐阅读
- c# - 我的更新运行计算,但将相同的值更新到所有行
- json - 将变量插入 json 有效负载(松弛 webhook)问题的 Bash 脚本
- javascript - 通过 wix 代码提供 HTML 图表时的事件处理程序问题
- python - 有人可以用python和google sheet api帮我解决这个问题吗?
- javascript - 我用 Javascript 设置的一个 cookie 总是为空。其余的读得很好
- debugging - 修改符号文件对源代码文件的引用
- three.js - 具有不同三角形方向的 THREE.js 中的平滑阴影
- azure - 如何在 Azure 搜索中实现成对查询相关的学习排名?
- javascript - 使用jquery变量让不同的DIV出现和消失
- typescript - 迭代接口/类属性并将它们添加到数组中 - TypeScript 3