【问题标题】:Getting a list of list of Nearest Neighbour within boundaries获取边界内最近邻居列表
【发布时间】:2019-10-12 13:43:26
【问题描述】:

我正在尝试返回 2D numpy 数组的每个项目的垂直、水平和对角最近邻居列表

import numpy as np
import copy
tilemap = np.arange(99).reshape(11, 9)
print(tilemap)

def get_neighbor(pos, array):
    x = copy.deepcopy(pos[0])
    y = copy.deepcopy(pos[1])
    grid = copy.deepcopy(array)
    split = []
    split.append([grid[y-1][x-1]])
    split.append([grid[y-1][x]])
    split.append([grid[y-1][x+1]])
    split.append([grid[y][x - 1]])
    split.append([grid[y][x+1]])
    split.append([grid[y+1][x-1]])
    split.append([grid[y+1][x]])
    split.append([grid[y+1][x+1]])
    print("\n Neighbors of ITEM[{}]\n {}".format(grid[y][x],split))

cordinates = [5, 6]
get_neighbor(pos=cordinates, array=tilemap)

我想要一个这样的列表: first item = 0

[[1],[12],[13],
 [1,2], [12,24],[13,26],
 [1,2,3], [12,24,36], [13,26,39]....

直到它完全到达边界然后继续second item = 1 并不断添加到列表中。如果上面有邻居,也应该添加..

我的结果

[[ 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 25 26]
 [27 28 29 30 31 32 33 34 35]
 [36 37 38 39 40 41 42 43 44]
 [45 46 47 48 49 50 51 52 53]
 [54 55 56 57 58 59 60 61 62]
 [63 64 65 66 67 68 69 70 71]
 [72 73 74 75 76 77 78 79 80]
 [81 82 83 84 85 86 87 88 89]
 [90 91 92 93 94 95 96 97 98]]

 Neighbors of ITEM[59]
 [[49], [50], [51], [58], [60], [67], [68], [69]]

【问题讨论】:

  • 你想用这个做什么,在什么情况下?这可能可以做到(也许通过大步走动?),但我对性能并不乐观。
  • 更多的棋盘游戏,当数组索引被传递时,我试图让所有方向的 8 个邻居到达数组的边界。 @AlexanderCécile 我可以得到前 8 个,但得到 nextkeeping directionboundary checking 似乎要了我的命
  • 你想要 8 个邻居,但是像你的帖子那样被分解了,对吧?所以首先是邻居 1 个“单元”,然后是 2 个,等等。
  • 是的,正是@AlexanderCécile,我只能得到第一个单元格,只是不知道如何得到下一个。

标签: python python-3.x list numpy


【解决方案1】:

好的,使用这样的函数怎么样?这需要数组、目标索引和要包含的元素的“半径”。

def get_idx_adj(arr, idx, radius):
    num_rows, num_cols = arr.shape
    idx_row, idx_col = idx
    slice_1 = np.s_[max(0, idx_row - radius):min(num_rows, idx_row + radius + 1)]
    slice_2 = np.s_[max(0, idx_col - radius):min(num_cols, idx_col + radius + 1)]
    return arr[slice_1, slice_2]

我目前正在尝试寻找转换元素索引的最佳方法,以便该函数可以在自己的输出上连续使用,以获取所有各种大小的子数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-02
    • 2017-10-21
    • 2020-06-11
    • 1970-01-01
    • 2013-04-22
    • 2019-06-30
    • 1970-01-01
    • 2016-09-19
    相关资源
    最近更新 更多