2017-08-17 159 views
-1

我有一个2D数组,并且想要沿着特定的行对其条目进行求和。它应该基本上像numpy.sum(),而不是沿着一列或一行,而是沿着一条线(由等式给出)。在特定的行上对数组条目进行求和,python

我真的不知道从哪里开始。有this answer它使用氡转移(虽然我没有设法porperly安装skimage包)。

有没有我可以从哪里开始的内置函数?

+0

你在谈论列表清单吗?也就是说,定义'[[1,2,3],[4,5,6]]'? – bendl

+1

首先,您必须确定该线上的点。一旦你有这些总和是微不足道的。详细说明你如何识别这些点。如果可能,请使用迭代代码和示例。我们可能会提出改进建议。 – hpaulj

+0

@bendl是的,它是一个列表的列表。 – SuperCiocia

回答

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找到躺在两个点之间的线的点。这并不完美,但不会返回全部它触及的点。不过这应该是一个很好的起点!

相关问题