Моя проблема заключается в следующем. Я создал фрейм данных с 20000 точек для х и плотности. х варьируется от [-1,1]. Это представитель не только х, но и у и г. Плотность на поверхности сферы - это то, что я хочу, и это сумма трех плотностей (интерференция).
Я делаю это грубой силой. Будет ли лучший способ? Я спрашиваю, потому что мне придется циклически сдвигать плотности и получать новые интерференционные картины и проводить оптимизацию, чтобы соответствовать микроволновому фону Cosmi c. Из-за высокого разрешения CMB количество точек велико.
def createSphere(a1,a2,a3,dfX):
dfX["xP"]= np.roll(dfX.x, a0)
dfX["DensityX"]= np.roll(dfX.DensitySTD, a1)
dfX["DensityY"]= np.roll(dfX.DensitySTD, a2)
dfX["DensityZ"]= np.roll(dfX.DensitySTD, a3)
dfY=dfX[dfX.x<=2]
dfY.x=dfY.x-1
dfsphere=pd.DataFrame(columns=["i", "j", "k","x","y","z", "density"])
for ind,inda in enumerate(itertools.product(dfY.index,dfY.index,dfY.index)):
if (dfY.iloc[inda[0]].x**2 +dfY.iloc[inda[1]].x**2 +dfY.iloc[inda[2]].x**2 -1)<=0.001:
dens = dfY.iloc[inda[0]].DensityX +dfY.iloc[inda[1]].DensityY +dfY.iloc[inda[2]].DensityZ
dfsphere.loc[ind,"i"]=inda[0]
dfsphere.loc[ind, "j"]=inda[1]
dfsphere.loc[ind, "k"]=inda[2]
dfsphere.loc[ind,"x"]=dfY.iloc[inda[0]].x
dfsphere.loc[ind, "y"]=dfY.iloc[inda[1]].x
dfsphere.loc[ind, "z"]=dfY.iloc[inda[2]].x
dfsphere.loc[ind,"density"] = dens
return dfY, dfsphere
dfY, dfsphere = createSphere(a1,a2,a3,dfX)de here