我有两个概率表p(B)和p(A | B):
pB_array=np.array([[0.97],[0.01],[0.02]])
pB = pd.DataFrame(pB_array,index=['B=n','B=m','B=s'])
pA_B_array=np.array([[0.9,0.8,0.3],[0.1,0.2,0.7]])
pA_B=pd.DataFrame(pA_B_array,index=['A=F','A=T'],columns=['B=n','B=m','B=s'])
我想将它们乘以列:
fAB=pA_B.multiply(pB.T,axis='columns')
获得一些结果:
B=n B=m B=s
A=F 0.1 0.2 0.3
A=T 0.5 0.4 0.1
但我只能得到这个:
B=n B=m B=s
0 NaN NaN NaN
A=F NaN NaN NaN
A=T NaN NaN NaN
我怎么能做对吗?
答案 0 :(得分:3)
这里的问题是沿着轴会发生对齐,因为这些不匹配你获得NaN
值。
In [173]:
fAB=pA_B.multiply(pB.T.squeeze().values,axis='columns')
fAB
Out[173]:
B=n B=m B=s
A=F 0.873 0.008 0.006
A=T 0.097 0.002 0.014
我们需要在这里调用squeeze
,因为如果没有这样做,形状是错误的,我们也可以通过调用.values
来返回一个np数组来匿名化数据,这样对齐就不会成为一个问题。
fAB=pA_B.multiply(pB.T.values,axis='columns')
结果:
ValueError:传递值的形状为(3,1),index表示暗示(3,2)
如:
In [176]:
print(pB.T.shape)
print(pB.T.squeeze().shape)
(1, 3)
(3,)
所以squeeze
将2-d数组展平为1-d数组