Могу ли я сделать маску математической формы для матрицы (Nx, Ny)? - PullRequest
0 голосов
/ 03 мая 2019

У меня есть матрица чисел (Nx, Ny), и я хотел бы выбрать из этой матрицы координаты / компоненты математической формы, поскольку это может быть линия с заданным наклоном.

Я научилсясоздать маску и как это сделать случайным образом, но я не могу думать о том, как сгенерировать маску математической формы в 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)

1 Ответ

0 голосов
/ 08 мая 2019

В конце я нашел очень простой способ сделать это.Я только что создал новую матрицу с теми же размерами, которые я хочу замаскировать, а затем, просто пройдясь по самой матрице и сравнив со значениями моей функции, я мог бы сделать это так легко.Я оставлю код здесь.

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)
...