在矩阵或列表中最接近“真实”的数量

2024-04-18 19:43:52 发布

您现在位置:Python中文网/ 问答频道 /正文

在二维矩阵中,如何找到具有我要搜索的值的邻居数?邻域定义为8连通(垂直、水平和对角)

例如,在下面的例子中,对于矩阵中的每个元素X[i][j],我想计算它的邻域中有多少个具有值A

样本输入:

matrix = [[A, B, A], 
          [B, A, A],
          [B, A, B]]

样本输出:

solution   = [[1, 4, 2],
              [3, 4, 3],
              [2, 2, 3]]

例如

  • matrix[0][0]有1个值为A的邻居-->;matrix[1][1]
  • matrix[0][2]有两个值为A-->;matrix[1][1]matrix[1][2]的邻居

Tags: gt元素定义水平矩阵matrix例子邻域
1条回答
网友
1楼 · 发布于 2024-04-18 19:43:52

绝对不是最好的方法,但它是一种有效的方法:

import numpy as np

mas1 = np.array([[True, False,  True],
       [ False,  True,  True],
       [ False,  True,  False]])

mas_answer = np.ndarray(shape=mas1.shape)

for i in range(mas1.shape[0]):
    for j in range(mas1.shape[1]):
        close_elt = []
        if i >= 1:
            try:
                close_elt.append(mas1[i-1,j])
            except:
                pass
            try:
                close_elt.append(mas1[i-1,j+1])
            except:
                pass

        if j >= 1:
            try:
                close_elt.append(mas1[i+1,j-1])
            except:
                pass
            try:
                close_elt.append(mas1[i,j-1])
            except:
                pass

        if i >= 1 and j >= 1:
            try:
                close_elt.append(mas1[i-1,j-1])
            except:
                pass

        try:
            close_elt.append(mas1[i,j+1])
        except:
            pass

        try:
            close_elt.append(mas1[i+1,j])
        except:
            pass
        try:
            close_elt.append(mas1[i+1,j+1])
        except:
            pass

        mas_answer[i,j] = close_elt.count(True)


# Ouput:
mas_answer
Out[27]: 
array([[1., 4., 2.],
       [3., 4., 3.],
       [2., 2., 3.]])

相关问题 更多 >