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

如何利用Numpy生成统计数组X、Y元素组合出现次数的矩阵?

嘿,这个问题问得相当到位!Numpy确实有专门用来生成这种基于(X,Y)元组出现频次矩阵的工具,最顺手的就是numpy.histogram2d函数,当然也有其他实现方式,我会结合你的示例一步步讲清楚怎么优雅搞定。

1. Numpy中生成这类矩阵的核心工具

你要的其实就是二维频次直方图,Numpy的numpy.histogram2d正好干这个事儿——它会统计所有(x,y)元组的出现次数,并把结果整理成矩阵形式,完全匹配你的需求。

2. 针对你的示例生成目标矩阵

先来看你的输入数据,我们直接用代码一步步实现:

首先导入Numpy并定义你的数组:

import numpy as np

x = np.array([1, 1, 2, 2, 3, 3, 1, 2, 3])
y = np.array([0, 1, 3, 2, 1, 0, 2, 1, 1])

接下来用histogram2d计算频次矩阵:

# 指定bins的范围:X的取值范围是0-3(对应矩阵4行),Y的取值范围是0-3(对应矩阵4列)
counts, _, _ = np.histogram2d(x, y, bins=[np.arange(0, 5), np.arange(0, 5)])
# 转换为整数类型,得到最终矩阵
matrix = counts.astype(int)

运行这段代码后,matrix就是你要的结果:

array([[0, 0, 0, 0],
       [1, 1, 1, 0],
       [0, 1, 1, 1],
       [1, 2, 0, 0]])

另一种实现思路(用numpy.unique)

如果想更直观地处理元组对,也可以用numpy.unique统计唯一元组的频次,再填充到空矩阵里:

# 把x和y组合成二维的元组对数组
xy_pairs = np.stack((x, y), axis=1)
# 获取唯一元组和对应的频次
unique_pairs, counts = np.unique(xy_pairs, axis=0, return_counts=True)
# 创建空矩阵,维度对应X和Y的最大取值+1
matrix = np.zeros((4, 4), dtype=int)
# 把频次填充到对应位置
matrix[unique_pairs[:, 0], unique_pairs[:, 1]] = counts

这个方法也能得到完全一样的结果,不过histogram2d更一步到位,适合这种标准的二维频次统计场景。

为什么这么做能匹配你的需求?
  • histogram2d的第一个参数是X数组,第二个是Y数组,返回的counts矩阵的行对应X的取值,列对应Y的取值,正好符合你的要求。
  • 我们指定的bins=[np.arange(0,5), np.arange(0,5)]是为了让矩阵索引和X、Y的实际取值完全对应(比如X=1对应矩阵第1行,Y=2对应矩阵第2列),这样X=0的行自然全为0,完美匹配你给出的目标矩阵。

内容的提问来源于stack exchange,提问作者Felipe Endlich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:43:17