Python中的联合概率分布
我有两个离散的随机变量,假设叫做A和B,它们的大小都是Nx1。假设A有m个独特的值,而B有n个独特的值。我想要找出一个mxn的矩阵,里面记录它们的频率或概率分布。之后,我还想把这个矩阵画出来,以展示分布情况。
我想用Python来实现这个。对我来说,Python还是个新东西,我想知道有没有什么函数可以帮我做到这一点。
任何帮助都非常感谢。
谢谢你
1 个回答
2
要在 numpy
中创建一个 n
行 m
列的矩阵,你可以把两个形状合适的数组相乘。如果数组 x
是 n
行 1
列,而数组 y
是 1
行 m
列,那么它们的乘积 x * y
就会变成 n
行 m
列的矩阵。
下面是一个例子,展示如何用一维数据来实现这个过程(我使用的是随机值,如果这是一个概率分布,实际上应该进行归一化处理,但在这个例子中不影响结果):
>>> 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
在进行乘法运算之前,给每个数组增加一个额外的维度。