比较网格中的布尔numpy数组

2024-09-27 21:27:06 发布

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

我想写一个函数来比较网格中一个节点的8个邻居。当至少有3个邻居的值与中心节点的值相同时,我们可以将该节点定义为快乐节点

例如,在该数组中,中心节点和值为0,我们看到它有3个0的邻居,因此该节点是快乐的:

 array([[ 1,  0,  1],
       [ 1,  0,  1],
       [-1,  0,  0]])

我期望布尔输出为TrueFalse

我能想到这样的东西吗?或者我能简单地使用numpy吗

def nodehappiness(grid, i, j, drempel=3):
    if i,j => 3:
       node == True

提前谢谢


Tags: 函数numpyfalsetrue网格if节点定义
3条回答

你在找这样的东西吗

def neighbour(grid, i, j):
    return np.delete((grid[i-1:i+2,j-1:j+2]).reshape(1,9),4)

# Test code
grid = np.arange(16).reshape(4,4)

b = neighbour(m, 2, 2)

试试这个

y=[]
l= len(x)
for i in range(0,l):
    for j in range(0,l):
        if i==int(l/2) and j==int(l/2):
            continue
        y.append(x[j,i])

试试这个:

def neighbours(grid, i, j):
    rows = np.array([-1, -1, -1,  0,  0,  1,  1,  1])
    cols = np.array([-1,  0,  1, -1,  1, -1,  0,  1])
    return grid[rows+i,cols+j]

编辑:示例

grid = np.arange(25).reshape((5,5))
#array([[ 0,  1,  2,  3,  4],
#       [ 5,  6,  7,  8,  9],
#       [10, 11, 12, 13, 14],
#       [15, 16, 17, 18, 19],
#       [20, 21, 22, 23, 24]])

neighbours(grid, 0, 0)
# array([24, 20, 21,  4,  1,  9,  5,  6])

说明

使用numpy可以使用负索引,从而轻松访问数组的最后一个条目。这也适用于多个维度:

x = np.array([0,1,2,3])
x[-1]
# 3

x.reshape((2,2))
#array([[0, 1],
#       [2, 3]])

x[-1,-1]
# 3

您对矩阵的8个条目感兴趣

  1. 左上方->;第1行,第1列
  2. 以上->;行-1,列+0
  3. 右上方->;行-1,列+1
  4. 左->;行+0,列-1

这就是数组rowscols所代表的。通过添加ij可以得到这些坐标周围的所有条目

相关问题 更多 >

    热门问题