Python中的联合概率分布

-2 投票
1 回答
4998 浏览
提问于 2025-04-18 14:29

我有两个离散的随机变量,假设叫做A和B,它们的大小都是Nx1。假设A有m个独特的值,而B有n个独特的值。我想要找出一个mxn的矩阵,里面记录它们的频率或概率分布。之后,我还想把这个矩阵画出来,以展示分布情况。

我想用Python来实现这个。对我来说,Python还是个新东西,我想知道有没有什么函数可以帮我做到这一点。

任何帮助都非常感谢。

谢谢你

1 个回答

2

要在 numpy 中创建一个 nm 列的矩阵,你可以把两个形状合适的数组相乘。如果数组 xn1 列,而数组 y1m 列,那么它们的乘积 x * y 就会变成 nm 列的矩阵。

下面是一个例子,展示如何用一维数据来实现这个过程(我使用的是随机值,如果这是一个概率分布,实际上应该进行归一化处理,但在这个例子中不影响结果):

>>> import numpy as np
>>> a = np.random.random(5)          # n values
>>> print(a)
[ 0.884703    0.78476467  0.26084923  0.82228242  0.48263909]
>>> b = np.random.random(8)          # m values
>>> print(b)
[ 0.53982228  0.59494659  0.92725768  0.03275801  0.39763316  0.72638816
  0.37634726  0.85483384]
>>> matrix = a[:,None] * b[None,:]   # n by m matrix
>>> print(matrix)
[[ 0.47758239  0.52635103  0.82034765  0.02898111  0.35178725  0.64263778
   0.33295555  0.75627406]
 [ 0.42363345  0.46689307  0.72767907  0.02570733  0.31204846  0.57004376
   0.29534404  0.6708434 ]
 [ 0.14081223  0.15519136  0.24187445  0.0085449   0.10372231  0.18947779
   0.0981699   0.22298275]
 [ 0.44388637  0.48921412  0.76246768  0.02693634  0.32696676  0.59729621
   0.30946374  0.70291484]
 [ 0.26053933  0.28714448  0.4475308   0.0158103   0.19191331  0.35058332
   0.1816399   0.41257622]]

这里的 None 切片告诉 numpy 在进行乘法运算之前,给每个数组增加一个额外的维度。

撰写回答