我有一个2D数组,并希望沿特定行汇总其条目。它应该基本上像numpy.sum()
,而不是沿着一列或一行,而是沿着一条线(由等式给出)。
我真的不知道从哪里开始。有this answer使用Radon传输(虽然我没有成功安装skimage包)。
我可以从哪个内置功能开始?
答案 0 :(得分:0)
以下是我的想法:
array = [[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]]
def points_on_line(x0,y0, x1,y1):
dx = x1 - x0
dy = y1 - y0
D = 2*dy - dx
y = y0
for x in range(x0, x1):
yield (x,y)
if D > 0:
y = y + 1
D = D - 2*dx
D = D + 2*dy
print(sum([array[y][x] for x, y in points_on_line(0,0, 5, 4)]))
这使用Bresenheim's Line Algorithm来查找位于两点之间的线上的点。但它并不完美,并且不会返回全部它接触到的点数。不过,这应该是一个很好的跳跃点!