You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现3D数组分箱统计对应粒子数的效率问题咨询

解决方法

核心是用NumPy内置的向量化直方图函数替代手动遍历,利用底层C实现的运算逻辑大幅提升效率,8e6规模的样本运算耗时仅需几毫秒。

核心代码实现

import numpy as np

# 替换为你的实际3D速度数组、粒子数组
vel_3d = np.random.rand(200,200,200) * 80  # 示例速度数组,取值范围0~80
particle_3d = np.random.randint(1, 12, size=(200,200,200))  # 示例粒子数数组

# 直接计算加权直方图,weights参数传入对应位置的粒子数,自动完成分箱求和
bin_particle_sum, bin_edges = np.histogram(vel_3d, bins=50, weights=particle_3d)

返回值说明

  • bin_edges:长度为51的一维数组,记录50个分箱的左右边界,第i个分箱的区间为[bin_edges[i], bin_edges[i+1]),最后一个分箱为闭区间
  • bin_particle_sum:长度为50的一维数组,第i个元素对应第i个速度分箱内的粒子总数量

可选扩展

如果需要自定义分箱边界而非按速度最大最小值自动划分,可自行指定bins参数:

# 示例:自定义速度分箱范围为0~100,生成51个边界点对应50个等宽分箱
custom_bins = np.linspace(0, 100, 51)
bin_particle_sum, bin_edges = np.histogram(vel_3d, bins=custom_bins, weights=particle_3d)

如果需要做更多分箱维度的统计,可通过np.digitize获取每个元素的分箱索引后自行计算:

# 获取每个速度值对应的分箱索引
bin_idx = np.digitize(vel_3d, bins=bin_edges)
# 示例:统计每个分箱的平均速度
bin_avg_vel = [vel_3d[bin_idx == i].mean() for i in range(1, len(bin_edges))]

内容的提问来源于stack exchange,提问作者Ahmed Saieed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:45:03