2017-08-17 27 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找到躺在兩個點之間的線的點。這並不完美,但不會返回全部它觸及的點。不過這應該是一個很好的起點!

相關問題