生成图案化的numpy矩阵

时间:2011-09-29 13:45:51

标签: python matrix numpy

是否有可能在“0”的静止矩阵中生成圆形图案为“1”的numpy矩阵?所以基本上是

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

应该看起来像

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

(好吧,这看起来很愚蠢,但在1000x1000规模上它会有意义)

numpy有这种可能吗?

2 个答案:

答案 0 :(得分: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 :(得分: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