1

我试图找到一种快速的方法来用旋转对称值填充 Numpy 数组。想象一个包含锥形区域的零数组。我有一个一维值数组,想将它围绕数组中心旋转 360°。没有像 z=f(x,y) 这样的二维函数,所以我无法明确计算二维值。我有一些有用的东西,但是对于大数组来说,for 循环太慢了。这应该是一个圆圈:

values = np.ones(100)
x = np.arange(values.size)-values.size/2+0.5
y = values.size/2-0.5-np.arange(values.size)
x,y = np.meshgrid(x,y)
grid = np.rint(np.sqrt(x**2+y**2))
arr = np.zeros_like(grid)
for i in np.arange(values.size/2):
    arr[grid==i] = values[i+values.size/2]

我的一维数组当然没有那么简单。有人能想出一种摆脱for循环的方法吗?

更新:我想为卷积模糊制作一个圆形过滤器。在我使用之前np.outer(values,values),它给了我一个矩形过滤器。David 的提示让我可以非常快速地创建一个圆形过滤器。见下文:

带有 np.outer() 的方形过滤器

带有大卫答案的圆形过滤器

4

2 回答 2

2

您可以使用精美的索引来实现此目的:

values = np.ones(100)
x = np.arange(values.size)-values.size/2+0.5
y = values.size/2-0.5-np.arange(values.size)
x,y = np.meshgrid(x,y)
grid = np.rint(np.sqrt(x**2+y**2)).astype(np.int)

arr = np.zeros_like(grid)
size_half = values.size // 2
inside = (grid < size_half)
arr[inside] = values[grid[inside] + size_half]

在这里,inside选择位于圆圈内的索引,因为只有这些项目可以派生自values

于 2016-02-06T18:35:27.980 回答
1

你可以这样做:

x=y=np.arange(-500,501)
r=np.random.randint(0,256,len(x)/np.sqrt(2)+1)
X,Y=np.meshgrid(x,y)
im=(X*X+Y*Y)**(1/2)
circles=r.take(np.int64(im))
plt.imshow(circles)

界

于 2016-02-06T21:45:25.990 回答