首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python中搜索矩阵中的值

在python中搜索矩阵中的值
EN

Stack Overflow用户
提问于 2020-12-06 19:50:16
回答 1查看 38关注 0票数 0

我正在尝试用矩阵来解决一个任务。我有函数:fill_area(矩阵,坐标,值)。例如,如果我要输入坐标(1,0)和值3,它应该在位置1写入3,并将值重写为3。如果近邻的数字具有相同的值,它也应该重写它们。我想使用堆栈或队列来存储数字,它们必须更改一个值。但是我不知道,怎么检查所有最近的位置。

代码语言:javascript
运行
复制
matrix = [[2, 0, 1],
          [0, 0, 1],
          [0, 1, 1]]

fill_area(matrix, (1, 0), 3)

matrix = [[2, 0, 1],
         [3, 3, 1],
         [3, 1, 1]]
EN

回答 1

Stack Overflow用户

发布于 2020-12-06 21:18:02

处理矩阵的首选方法是numpy,但似乎没有明显的方法来处理这种特殊情况,同时避免对numpy中的项进行循环。我从你的例子中可以看出,你将“贴近度”定义为给定坐标周围的面片,但仅在坐标方向上。我有两个版本,一个用于给定坐标周围的整个坐标片,另一个仅用于ij方向(根据您的示例)。两者都是列表理解,为了更好的可读性,您可能希望将其更改为常规循环。

代码语言:javascript
运行
复制
def fill_area(mat, ij, val):
    '''set patch around ij in mat to val for all positions where the original mat value == mat val at ij, full patch''' 
    return [[val if abs(i-ij[0])<2 and abs(j-ij[1])<2 and mat[i][j] == mat[ij[0]][ij[1]] 
             else mat[i][j] for j in range(len(mat[1]))] for i in range(len(mat))]

def fill_area1(mat, ij, val):
    '''set patch around ij in mat to val for all positions where the original mat value == mat val at ij, patch ij-dir''' 
    return [[val if ((abs(i-ij[0])<2 and j==ij[1]) or (abs(j-ij[1])<2 and i==ij[0])) and mat[i][j] == mat[ij[0]][ij[1]] 
             else mat[i][j] for j in range(len(mat[1]))] for i in range(len(mat))]

matrix = [[2, 0, 1],
          [0, 0, 1],
          [0, 1, 1]]

print('entire patch: ', fill_area(matrix, (1, 0), 3))
print('ij-directional: ', fill_area1(matrix, (1, 0), 3))

它会产生

代码语言:javascript
运行
复制
entire patch:  [[2, 3, 1], [3, 3, 1], [3, 1, 1]]
ij-directional:  [[2, 0, 1], [3, 3, 1], [3, 1, 1]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65167697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档