x y
1 1.2
1 2.3
1 4.5
2 2.3
2 1.2
2 0.8
转换为:计算均值和中2-d矩阵标准偏差
x ymean ystandard-deviation
1 value value
我如何能在第一矩阵转换为第二?
x y
1 1.2
1 2.3
1 4.5
2 2.3
2 1.2
2 0.8
转换为:计算均值和中2-d矩阵标准偏差
x ymean ystandard-deviation
1 value value
我如何能在第一矩阵转换为第二?
只需使用逻辑索引来提取出相应的y
值的每个唯一值x
,然后找到的平均值,将所得值y
的标准偏差。
具体来说:
x = [1 1 1 2 2 2];
y = [1.2 2.3 4.5 2.3 1.2 0.8];
y1 = y(x == 1);
y2 = y(x == 2);
m1 = mean(y1);
s1 = std(y1);
m2 = mean(y2);
s2 = std(y2);
我们得到:
>> m1
m1 =
2.6667
>> m2
m2 =
1.4333
>> s1
s1 =
1.6803
>> s2
s2 =
0.7767
m1,m2
和s1,s2
是装置和分别相应于和x = 1
的x = 2
值y
的标准偏差。
在一般情况下,你可以使用accumarray
到组根据每个独特x
值全部y
值。这样,您可以容纳多个唯一值x
,而无需对每个唯一值x
使用逻辑索引。
在的情况下x
是未排序,我们可以排序他们首先使用unique
在这里我们使用所述第一输出包含所有唯一x
值的和我们使用第三输出该重新分配的x
每个值是唯一的已排序的ID。这些将被用作钥匙进入accumarray
:
[vals, ~, id] = unique(x);
m = accumarray(id, y, [], @mean);
s = accumarray(id, y, [], @std);
m
和s
将包含平均值和标准偏差的x
每个独特的价值。此外,m
和s
的相应位置对应于vals
中的相同位置。
比方说,我们有这个例子来代替:
x = [1 2 3 2 4 2 1];
y = [1.2 2.3 4.5 2.3 1.2 0.8 1.6];
如果我们使用上面的代码,我们得到:
>> vals
vals =
1 2 3 4
>> m
m =
1.4000
1.8000
4.5000
1.2000
>> s
s =
0.2828
0.8660
0
0
不要与具有标准偏差的最后两个条目惊慌当你只有一个由1个点组成的数据集时,这就是定义。对于x = 3
和x = 4
只定义了一个点。
我不关注你真正想要计算的东西。你想计算均值和标准。开发。 'y'值?这是不是很清楚你想要什么。 – rayryeng 2015-04-01 03:39:45
是对应于每个x值 – 2015-04-01 03:46:00