Numpy Masking и Meshgrid дают непонятный результат - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь использовать numpy.meshgrid для симуляции трехмерного пространства и выполнения в нем нескольких действий.Сначала мне нужно определить подпространство в нем, используя какую-то маску, а позже мне нужно будет вычислить различные расстояния между различными точками.

def Projtest1(LX,LY,LZ,N,R):
    xlin,dx=np.linspace(-LX/2,LX/2,N,retstep=True,dtype=float)
    ylin,dy=np.linspace(-LY/2,LY/2,N,retstep=True,dtype=float)
    zlin,dz=np.linspace(-LZ/2,LZ/2,N,retstep=True,dtype=float)

    X,Y,Z=np.meshgrid(xlin,ylin,zlin,indexing='ij')

    mask=(X)**2+(Y)**2+(Z)**2
    Cmask=mask<R**2
    Cmask=Cmask.astype(int,'copy=False')
    XC=X
    XC=np.multiply(X,Cmask)
    YC=np.multiply(Y,np.where(False,Y,Cmask.astype(int)))
    ZC=np.multiply(Z,np.where(False,Z,Cmask.astype(int)))


    print (np.shape(XC))    
    print (np.shape(Cmask))
    print(X[2][2][2]*Cmask,Cmask[2][2][2],X[2][2][2])
    return Cmask, XC, X # YC, ZC

Одна из моих проблем заключается в том, что при запуске этогокод, я получаю только часть пространства, которое я хочу, на любой данной матрице XC YC ZC.

Projtest1(100,100,100,5,50)

Cmask

(array([[[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, 0, 0],
     [0, 1, 1, 1, 0],
     [0, 1, 1, 1, 0],
     [0, 1, 1, 1, 0],
     [0, 0, 0, 0, 0]],

    [[0, 0, 0, 0, 0],
     [0, 1, 1, 1, 0],
     [0, 1, 1, 1, 0],
     [0, 1, 1, 1, 0],
     [0, 0, 0, 0, 0]],

    [[0, 0, 0, 0, 0],
     [0, 1, 1, 1, 0],
     [0, 1, 1, 1, 0],
     [0, 1, 1, 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, 0, 0, 0]]])

и XC, что должно быть замаскированной координаты Xдля подпространства

array([[[ -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.,  -0.,  -0.],
     [ -0., -25., -25., -25.,  -0.],
     [ -0., -25., -25., -25.,  -0.],
     [ -0., -25., -25., -25.,  -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.,   0.,   0.,   0.]],

    [[  0.,   0.,   0.,   0.,   0.],
     [  0.,  25.,  25.,  25.,   0.],
     [  0.,  25.,  25.,  25.,   0.],
     [  0.,  25.,  25.,  25.,   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.,   0.,   0.,   0.]]]))

Я смущен этим, и не уверен, является ли это каким-либо несоответствием индексации или, возможно, ошибкой типа.Я довольно новичок в использовании numpy, и мне интересно, является ли meshgrid неправильным подходом для моих целей.Код немного искажен от замены частей, чтобы попытаться увидеть, что на самом деле происходит

Любой и все ввод будет полезен, и дайте мне знать, что мне нужно предоставить дополнительную информацию.Спасибо!

РЕДАКТИРОВАТЬ: я хотел бы, чтобы массив XC, показанный во-вторых, передавал значения во всех позициях, которые массив Cmask, показанный первым, равен = 1 (или True, если он лучше, чем bool),Вы можете видеть, что на 3-м срезе матрицы XC, которая соответствует плоскости X = 0, значения не переносятся, несмотря на то, что маска там положительная.Эта проблема возникает также в YC и ZC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...