i有一个数字矩阵(NX,纽约(,我想从该矩阵中选择数学形状坐标/组件,因为它可能是具有给定斜率的线。
我学会了如何以随机的方式创建口罩以及如何做到这一点,但我无法想到如何在Python中生成数学形状面具。
这是我能够开发的一些代码。如果您知道一种更好的方法,我也会感谢被告知。
import random
import numpy as np
threshold = 0.85
radius=40
sq7=1/(radius*radius)
matrix=np.zeros((Nx,Ny))
for i in range(0,Nx):
for j in range(0,Ny):
if ((i-Nx*0.5)*(i-Nx*0.5)*sq7+(j-Ny*0.5)*(j-Ny*0.5)*sq7<=1.0):
matrix[i,j]= 1.0 - 0.1*random.random();
else:
matrix[i,j]=-1.0 + random.random();
randoms = np.random.normal(0,scale=0.002, size=matrix[mask].shape)
mask = matrix**2 < threshold
matrix[mask] += randoms * (1 - matrix[mask]**2)
最后,我找到了一种非常简单的方法。我刚刚做的是创建一个与我要掩盖的矩阵的新矩阵,然后通过浏览矩阵本身并与我可以轻松完成的函数值进行比较。我将留在这里。
def func_normaldist(x,Ny):
y = np.exp(-0.5*(x-int(Ny/2))**2)/np.sqrt(np.pi*2.)
return y
def mask_uvalues_centered_geometry(Nx, Ny): #u
mask = np.zeros((Nx,Ny))
# Initial configuration: rectangle of Nx x Ny
for j in range(0,Ny):
for i in range(0,Nx):
if (i < Ny*Nx*func_normaldist(j,Ny)):# and (i > int(Nx/2 + 1)):
mask[j,i] = True
else:
mask[j,i] = False;
return mask
Nx = 50
Ny = 50
a = mask_uvalues_centered_geometry(Nx,Ny)
print(a)