Matlab标准偏差-将向量视为概率,而不是值
我在Matlab中有一个向量,看起来像:Matlab标准偏差-将向量视为概率,而不是值,matlab,standard-deviation,Matlab,Standard Deviation,我在Matlab中有一个向量,看起来像: vect = 0 100 300 500 700 1000 500 300 200 0 归一化后,每个值应表示某个值的概率,我的值仅为1到10(即0%概率为1,100/和(vect)概率为2,等等) 我如何计算该值的统计数据(特别是标准偏差)。。?如果我做了平均值(vect),我得到的结果是360,我得到的标准偏差值也同样大。当然,平均值应该在5左右。我相信手动
vect = 0
100
300
500
700
1000
500
300
200
0
归一化后,每个值应表示某个值的概率,我的值仅为1到10(即0%概率为1,100/和(vect)
概率为2,等等)
我如何计算该值的统计数据(特别是标准偏差)。。?如果我做了
平均值(vect)
,我得到的结果是360,我得到的标准偏差值也同样大。当然,平均值应该在5左右。我相信手动编写代码一点也不难,但必须有一种直接在Matlab中实现的方法,所以我想我会问 我不确定matlab是否有任何内置函数,但这没什么大不了的。无论如何,两者都是一行
vect = [0; 100; 300; 500; 700; 1000; 500; 300; 200; 0];
prob = vect./sum(vect);
val = [1:10].';
meanVal = sum(prob.*val);
stDev = sqrt( sum( prob.*val.^2 ) -sum(prob.*val)^2 );
编辑:
有两个函数可以实现这一点。它们也被称为
mean
和std
。但是他们采用了概率分布对象。我不确定matlab是否有任何内置函数,但这没什么大不了的。无论如何,两者都是一行
vect = [0; 100; 300; 500; 700; 1000; 500; 300; 200; 0];
prob = vect./sum(vect);
val = [1:10].';
meanVal = sum(prob.*val);
stDev = sqrt( sum( prob.*val.^2 ) -sum(prob.*val)^2 );
编辑:
有两个函数可以实现这一点。它们也被称为
mean
和std
。但是他们采用了概率分布对象。我不确定matlab是否有任何内置函数,但这没什么大不了的。无论如何,两者都是一行
vect = [0; 100; 300; 500; 700; 1000; 500; 300; 200; 0];
prob = vect./sum(vect);
val = [1:10].';
meanVal = sum(prob.*val);
stDev = sqrt( sum( prob.*val.^2 ) -sum(prob.*val)^2 );
编辑:
有两个函数可以实现这一点。它们也被称为
mean
和std
。但是他们采用了概率分布对象。我不确定matlab是否有任何内置函数,但这没什么大不了的。无论如何,两者都是一行
vect = [0; 100; 300; 500; 700; 1000; 500; 300; 200; 0];
prob = vect./sum(vect);
val = [1:10].';
meanVal = sum(prob.*val);
stDev = sqrt( sum( prob.*val.^2 ) -sum(prob.*val)^2 );
编辑:
有两个函数可以实现这一点。它们也被称为mean
和std
。但是它们采用概率分布对象。如果调用stem(vect)
您将看到vect
是正态分布变量的概率密度函数,因此您可以在不进行归一化的情况下将正态分布拟合到vect
结果的平均值为5.63889,标准偏差为1.66944。如果调用stem(vect)
,您将看到vect
是正态分布变量的概率密度函数,因此可以在不进行归一化的情况下将正态分布拟合到vect
结果的平均值为5.63889,标准偏差为1.66944。如果调用stem(vect)
,您将看到vect
是正态分布变量的概率密度函数,因此可以在不进行归一化的情况下将正态分布拟合到vect
结果的平均值为5.63889,标准偏差为1.66944。如果调用stem(vect)
,您将看到vect
是正态分布变量的概率密度函数,因此可以在不进行归一化的情况下将正态分布拟合到vect
结果的平均值为5.63889,标准偏差为1.66944。是的-这绝对是明确的方法,但似乎奇怪的是,没有更直接的方法……嗯,我想说,一般来说,你不需要更直接的方法来做。如果你非常想有一个更直接的方法,你应该写一个你自己的函数。将其存储在matlab中始终包含的路径中,或者将其设置在一个位置,在该位置您可以记住它的位置,例如“工具”文件夹,并在需要时包含它。但是,看看
meanVal=sum(prob.*val)
。这真的是一条更直接的路线吗?首先创建一个概率分布对象可能需要更多的工作,并且可能会有更多的开销和更长的运行时间。@tiswas您还知道,您也可以在matlab中编写启动函数。在其中,您可以添加matlab尚未完成的启动例程。例如,您可以在其中设置路径。因此,如果您有一些始终想要包含的工具,您可以将其添加到启动函数中。换句话说,如果你认为matlab遗漏了一行程序,你可以花5分钟来编写这个函数,并将它设置在一个添加到启动函数中的路径中。你再也不需要关心它了,你只花了5分钟的时间。是的-这绝对是明确地做这件事的方式,但似乎奇怪的是,没有更直接的途径了。嗯,我想说,一般来说,你不需要更直接的方式来做这件事。如果你非常想有一个更直接的方法,你应该写一个你自己的函数。将其存储在matlab中始终包含的路径中,或者将其设置在一个位置,在该位置您可以记住它的位置,例如“工具”文件夹,并在需要时包含它。但是,看看meanVal=sum(prob.*val)
。这真的是一条更直接的路线吗?首先创建一个概率分布对象可能需要更多的工作,并且可能会有更多的开销和更长的运行时间。@tiswas您还知道,您也可以在matlab中编写启动函数。在其中,您可以添加matlab尚未完成的启动例程。例如,您可以在其中设置路径。因此,如果您有一些始终想要包含的工具,您可以将其添加到启动函数中。换句话说,如果你认为matlab遗漏了一行程序,你可以花5分钟来编写这个函数,并将它设置在一个添加到启动函数中的路径中。你再也不需要关心它了,你只花了5分钟的时间。是的-这绝对是明确地做这件事的方式,但似乎奇怪的是,没有更直接的途径了。嗯,我想说,一般来说,你不需要更直接的方式来做这件事。如果你非常想有一个更直接的方法,你应该写一个你自己的函数。把它放在拍子里