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

如何从histogram2d结果中获取x、y的一维网格计数?

解决方案

首先需要明确:二维直方图的每个网格计数x1y1[i,j],表示的是同时落在第i个x分箱和第j个y分箱的(x1,y1)点对数量。你提到的“每个网格中x1和y1的单独点数之和等于x1y1对应值”存在表述偏差——每个点对同时属于x和y分箱,所以每个网格里的x点数和y点数本质上都是该网格的计数,两者之和会是原计数的2倍,而非等于原计数。

以下针对两种合理需求给出实现方法:


需求1:生成与x1y1同尺寸的x/y边缘分箱计数矩阵

如果是想得到分别对应x、y一维直方图的二维扩展矩阵(每行重复x的分箱计数,每列重复y的分箱计数):

import numpy as np

# 原数据生成
x1 = np.random.normal(5,5,340)
y1 = np.random.normal(5,5,340)

# 生成二维直方图
x1y1, edgex1, edgey1 = np.histogram2d(x=x1,y=y1, bins=10)

# 生成x的二维计数矩阵:每行都是x的一维分箱计数
x_counts, _ = np.histogram(x1, bins=edgex1)
x_matrix = np.tile(x_counts.reshape(-1, 1), (1, x1y1.shape[1]))

# 生成y的二维计数矩阵:每列都是y的一维分箱计数
y_counts, _ = np.histogram(y1, bins=edgey1)
y_matrix = np.tile(y_counts.reshape(1, -1), (x1y1.shape[0], 1))

需求2:拆分每个网格的计数为x/y两部分(和等于原计数)

如果是想将每个网格的总点数拆分为x、y两个部分,且两者之和等于原网格计数(比如随机拆分):

import numpy as np

# 原数据生成与二维直方图生成(同前)
x1 = np.random.normal(5,5,340)
y1 = np.random.normal(5,5,340)
x1y1, edgex1, edgey1 = np.histogram2d(x=x1,y=y1, bins=10)

# 随机生成x的计数矩阵(每个值在0到原网格计数之间)
x_split = np.random.randint(0, x1y1.astype(int)+1, size=x1y1.shape)
# y的计数矩阵为原计数减去x的计数
y_split = x1y1.astype(int) - x_split

此时x_split[i,j] + y_split[i,j]完全等于x1y1[i,j],且两个矩阵尺寸与x1y1一致。

内容的提问来源于stack exchange,提问作者Iphy Kelvin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:54:53