在分配期间编制索引

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)

Dim*_*ima 5

将类标签和数据分成不同的变量.

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)