gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:44:20 25 4
gpt4 key购买 nike

我有一个数据存档。 (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 的方形网格,并在获得网格上每个点的“EXTRA”总和之后。
这是我试过的
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")
我获得作为输出
(x,y)= 0.1 , 0.35 , (i,j)= 0 , 0 Unkow sum of extra
(x,y)= 0.2 , 0.15 , (i,j)= 0 , 0 Unkow sum of extra
(x,y)= 0.1 , 3.0 , (i,j)= 0 , 3 Unkow sum of extra
(x,y)= 3.0 , 1.5 , (i,j)= 3 , 1 Unkow sum of extra
(x,y)= 3.0 , 3.5 , (i,j)= 3 , 3 Unkow sum of extra
(x,y)= 4.1 , 4.5 , (i,j)= 4 , 4 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值。获取 EXTRA 的总和每个组的值。

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)))

使用 Pandas DataFrame 的相同概念。
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

关于python - 将 3D 数据划分为立方子集并计算立方体内的点数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64405267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com