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左右。我相信手动

我在Matlab中有一个向量,看起来像:

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分钟的时间。是的-这绝对是明确地做这件事的方式,但似乎奇怪的是,没有更直接的途径了。嗯,我想说,一般来说,你不需要更直接的方式来做这件事。如果你非常想有一个更直接的方法,你应该写一个你自己的函数。把它放在拍子里