Python 如何有效地将属性仅指定给三个数据帧(包含笛卡尔坐标中的属性)之外的球体中的点?

Python 如何有效地将属性仅指定给三个数据帧(包含笛卡尔坐标中的属性)之外的球体中的点?,python,pandas,optimization,geometry-surface,Python,Pandas,Optimization,Geometry Surface,我的问题如下。我创建了一个包含20000个x点和密度点的数据框。 x从[-1,1]变化。这不仅代表x,也代表y和z。 球体表面的密度是我想要的,这是三个密度(干涉)的总和 我是用蛮力做这件事的。还有更好的办法吗?我这样问是因为我将不得不循环移动密度,获得新的干涉图,并进行优化以匹配宇宙微波背景。由于CMB的高分辨率,点数很大 def createSphere(a1,a2,a3,dfX): dfX["xP"]= np.roll(dfX.x, a0) dfX["DensityX"]=

我的问题如下。我创建了一个包含20000个x点和密度点的数据框。 x从[-1,1]变化。这不仅代表x,也代表y和z。 球体表面的密度是我想要的,这是三个密度(干涉)的总和

我是用蛮力做这件事的。还有更好的办法吗?我这样问是因为我将不得不循环移动密度,获得新的干涉图,并进行优化以匹配宇宙微波背景。由于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
def createSphere(a1、a2、a3、dfX): dfX[“xP”]=np.roll(dfX.x,a0) dfX[“DensityX”]=np.辊(dfX.DensitySTD,a1) dfX[“密度Y”]=np.辊(dfX.DensitySTD,a2) dfX[“DensityZ”]=np.辊(dfX.DensitySTD,a3)
dfY=dfX[dfX.xPython没有数据帧。如果您询问有关熊猫的信息,请记住使用标签。谢谢。我下次会记住它。后来,我认为这可以作为球体照明问题来解决,但我不确定如何写下它,如果真的有可能的话。我意识到我应该从sphe开始映射我会这样做,稍后再发布我的新方法。