Я пытаюсь использовать 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.