2011-09-29 130 views
2

是否有可能在「0」的靜止矩陣中生成具有「1」的圓形圖案的numpy矩陣?所以基本上一個生成圖案化的numpy矩陣

generate(ysize, xsize, ycenter, xcenter, radius) 

應該是這個樣子

[000000000] 
[000000000] 
[000001000] 
[000011100] 
[000111110] 
[000011100] 
[000001000] 
[000000000] 

(好吧,這看起來愚蠢的,但在1000×1000的規模它將使意義)

是否有numpy的這種可能性?

+1

手動實現不會那麼困難。 – thomasfedb

+0

我需要它來提高效率,因爲我的「手工」算法有點慢。我希望得到numpy的支持,因爲它能夠比我更快地處理矩陣運算。 – Jakob

回答

6
def generate(ysize, xsize, ycenter, xcenter, radius): 
    x = np.arange(xsize)[None,:] 
    y = np.arange(ysize)[:,None] 
    return ((xcenter - x) ** 2 + (ycenter - y) ** 2 <= radius ** 2) * 1 


generate(10,8,4,3,2) 


array([[0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 1, 0, 0, 0, 0], 
     [0, 0, 1, 1, 1, 0, 0, 0], 
     [0, 1, 1, 1, 1, 1, 0, 0], 
     [0, 0, 1, 1, 1, 0, 0, 0], 
     [0, 0, 0, 1, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0]]) 
+1

如果你真的想要速度,你可以通過平方半徑來消除sqrt。 –

+0

@Justin,你說得對,謝謝 – eumiro

+0

非常感謝 – Jakob

5

比@ eumiro的答案更簡潔一點,但本質上相同。

import numpy 

def generate(ysize, xsize, ycenter, xcenter, radius): 
    x, y = numpy.mgrid[0:ysize,0:xsize] 
    return ((x - ycenter)**2 + (y - xcenter)**2 <= radius**2) * 1