【发布时间】:2019-05-27 07:07:30
【问题描述】:
我有一个 NxN 矩阵,我想为矩阵中的每个元素在半径 R 内找到非零元素的索引(或至少计数)。矩阵会很大,所以我计划使用 Numpy 进行计算,并且我需要索引,因为这个矩阵通过数据存储(这是一个 python 对象列表 [[]] )链接到另一个矩阵。
矩阵如下所示:
其中绿色是选定的单元格,黄色 - 周围区域。
主要问题是移动模板,无论是循环还是矢量化。
我尝试了以下代码,它给出了相对于该点的正确坐标(全部在半径范围内且不包括中心),但我不知道如何将其应用于 numpy 数组:
r = 2
neighbor_coords = []
for i in list(itertools.product(range(-r, r+1), repeat=2)):
if any(i) and np.sqrt(i[0]**2 + i[1]**2) <= r:
neighbor_coords.append(i)
>>> [(-2, 0), (-1, -1), (-1, 0), (-1, 1), (0, -2), (0, -1), (0, 1), (0, 2), (1, -1), (1, 0), (1, 1), (2, 0)]
预期输出是相邻元素的索引或计数。
【问题讨论】:
-
您使用的是欧式距离。如果您的半径为 3 或更大,这将不起作用。你应该使用街区距离
标签: python-3.x numpy