如何在Matlab中类似于Excel或R计算泊松矩阵并求和某些部分?

问题描述 投票:0回答:1

我已经在this link下发布了一个类似的问题,但由于我对自己的表达不够清楚或我无法理解答案,因此无法奏效。但是,如果我已经使用R(R Studio)实现了我的项目,那么这个问题就更精确了。不幸的是,我已经意识到R Studio可以像Excel一样慢地计算我的泊松矩阵,这就是为什么我被迫使用Matlab实现项目的原因。

R中的代码:

a <- Table$ValueA
b <- Table1$ValueB
lapply(a,function(a) {lapply(b,function(b) {outer(dpois(0:20,a), dpois(0:20,b))})})

在Excel中的计算:

= POISSON(x;a;FALSE) * POISSON(x;b;FALSE)

,其中ab是变量,所有输入值对都一个接一个地分配给它们。 X是一个从0到20的变量。因此,对于输入值对(a,b)的每条记录(位于两列中),我想创建一个基于上述Poisson计算的Matrix,其中X从0到20。

例如单元格(1,1)中矩阵的第一个结果基于以下计算:

= POISSON(0;a;FALSE) * POISSON(0;b;FALSE)

下图显示了Excel中的矩阵:

enter image description here

最后,我想对矩阵的三个部分求和,并在每列输入值记录的两列(包含输入值ab)旁边显示这三个值:

1)的总和:从左上角到右下角的对角线2)总和:矩阵的upper rest3)总和:矩阵的[[lower rest

如果有任何人可以提供帮助,那就太好了,因为我真的希望使用Matlab来提高性能!
r excel matlab statistics poisson
1个回答
1
投票

方法1:需要统计信息工具箱如果具有统计信息工具箱,则可以使用Probability Distribution Objects

通过下休息和上休息,我想你的意思是上下triangular matrices。这意味着使用diagdiagtriu可以更轻松地进行“汇总”部分。

triu

方法2:需要统计信息工具箱

这也可以通过tril功能实现。 tril

方法3:不需要工具箱

如果您根本不想使用任何工具箱,则可以基于% MATLAB R2019a a = 1; % Rate for Poisson dist A b = 2; % Rate for Poisson dist B X = 0:20; pd_a = makedist('Poisson',a); pd_b = makedist('Poisson',b); A = pdf(pd_a,X); B = pdf(pd_b,X); M = A(:)*B(:).'; % Sum stuff up s1 = sum(diag(M)); s2 = sum(triu(M),'all'); s3 = sum(tril(M),'all'); poispdf对其进行硬编码而不会带来太多麻烦。 poispdf

注意:技术含量低的方法

以上方法只是利用以下事实:将列乘以一行(具有适当的长度)会生成矩阵。您可以使用以下代码进行验证。 A2 = poisspdf(X,a); B2 = poisspdf(X,b); M2 = A2(:)*B2(:).';
很容易验证Poisson distribution到可接受的精度。 
© www.soinside.com 2019 - 2024. All rights reserved.