Ala*_*air 3 indexing matlab octave
说我有这个样本数据
A =
1.0000 6.0000 180.0000 12.0000
1.0000 5.9200 190.0000 11.0000
1.0000 5.5800 170.0000 12.0000
1.0000 5.9200 165.0000 10.0000
2.0000 5.0000 100.0000 6.0000
2.0000 5.5000 150.0000 8.0000
2.0000 5.4200 130.0000 7.0000
2.0000 5.7500 150.0000 9.0000
Run Code Online (Sandbox Code Playgroud)
我希望计算每列的方差,按类(第一列)分组.
我使用以下代码,但它使用硬编码索引,需要知道每个类的样本数,它们必须按特定顺序.
有一个更好的方法吗?
variances = zeros(2,4);
variances = [1.0 var(A(1:4,2)), var(A(1:4,3)), var(A(1:4,4));
2.0 var(A(5:8,2)), var(A(5:8,3)), var(A(5:8,4))];
disp(variances);
1.0 3.5033e-02 1.2292e+02 9.1667e-01
2.0 9.7225e-02 5.5833e+02 1.6667e+00
Run Code Online (Sandbox Code Playgroud)
将类标签和数据分成不同的变量.
cls = A(:, 1);
data = A(:, 2:end);
Run Code Online (Sandbox Code Playgroud)
获取课程标签列表
labels = unique(cls);
Run Code Online (Sandbox Code Playgroud)
计算差异
variances = zeros(length(labels), 3);
for i = 1:length(labels)
variances(i, :) = var(data(cls == labels(i), :)); % note the use of logical indexing
end
Run Code Online (Sandbox Code Playgroud)