Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将3D数据划分为立方体子集并计算立方体内的点_Python_Python 3.x_Numpy - Fatal编程技术网

Python 将3D数据划分为立方体子集并计算立方体内的点

Python 将3D数据划分为立方体子集并计算立方体内的点,python,python-3.x,numpy,Python,Python 3.x,Numpy,我有一个数据档案。(xx,yy,EXTRA)我想把数据分成大小相等的网格。例如,假设数据为: xx=np.array([0.1, 0.2, 3, 4.1, 3, 0.1]) yy=np.array([0.35, 0.15, 1.5, 4.5, 3.5, 3]) EXTRA=np.array([0.01,0.003,2.002,4.004,0.5,0.2]) 我想制作尺寸为1x1的正方形网格,然后获得网格上每个点的“额外”总和 这就是我试过的 import math for

我有一个数据档案。(xx,yy,EXTRA)我想把数据分成大小相等的网格。例如,假设数据为:

xx=np.array([0.1,  0.2,   3,   4.1,  3, 0.1])  
yy=np.array([0.35, 0.15, 1.5,  4.5, 3.5, 3])
EXTRA=np.array([0.01,0.003,2.002,4.004,0.5,0.2])
我想制作尺寸为1x1的正方形网格,然后获得网格上每个点的“额外”总和

这就是我试过的

import math

for i in range(0,5):   
    for j in range(0,5):
        for x,y in zip(xx,yy):
           k=math.floor(x)
           kk=math.floor(y)
           if i<=k<i+1.0 and j<=kk<j+1.0:
               print("(x,y)=" ,x,",",y,",","(i,j)=",i,",",j ,"Unkow sum of EXTRA")
因此,前两个点具有坐标(0.1,0.35)和(0.2,0.15),并且位于cuadrant(0,0)内。查看“EXTRA”,我知道在cuadrant(0,0)中,我应该得到“EXTRA”的和应该是sum_EXTRA=0.01+0.003。然而,我不知道如何从代码的角度来求和

更多信息

我真正的问题是在一个大立方体盒子里有“粒子”,我想把盒子细分成更小的盒子,在每个更小的盒子里,我想得到它们的“质量”之和,在我的例子中是“额外=质量”


我怀疑我对粒子是否属于象限进行分类的方法很慢,这可能是一个问题,因为我有很多数据。如果有任何建议,我们将不胜感激。

将三个数组与zip组合,并根据
xx
yy
值对结果进行排序。然后根据
xx
yy
值将其分组。获取每组的
额外
值之和

import operator, itertools
important = operator.itemgetter(0,1)
xtra = operator.itemgetter(-1)
data = sorted(zip(xx.astype(int),yy.astype(int),EXTRA),key=important)
gb = itertools.groupby(data,important)
for key,group in gb:
    values = list(map(xtra,group))
    print(key,values,sum(values))
    # or just
    #print(key,sum(map(xtra,group)))

使用熊猫数据帧的相同概念

import pandas as pd
xx, yy = xx.astype(int),yy.astype(int)

In [25]: df = pd.DataFrame({'xx':xx,'yy':yy,'EXTRA':EXTRA})

In [26]: df.groupby(['xx','yy'])['EXTRA'].sum()
Out[26]: 
xx  yy
0   0     0.013
    3     0.200
3   1     2.002
    3     0.500
4   4     4.004
Name: EXTRA, dtype: float64

我怀疑。。。速度很慢
-您是否进行了任何测试以验证这一点?还没有,在完成全部工作之前,我正在使用较小的样本。不过,我认为我找到了一种更简单的方法来做我想做的事情,如果可行,我会将解决方案作为评论发布。你也可以看看3D中最快的解决方案。
pandas
似乎在这里获胜,但如果使用降维,你可以实现2-3倍的速度提升。
import pandas as pd
xx, yy = xx.astype(int),yy.astype(int)

In [25]: df = pd.DataFrame({'xx':xx,'yy':yy,'EXTRA':EXTRA})

In [26]: df.groupby(['xx','yy'])['EXTRA'].sum()
Out[26]: 
xx  yy
0   0     0.013
    3     0.200
3   1     2.002
    3     0.500
4   4     4.004
Name: EXTRA, dtype: float64