0

我有一个 1000x7 矩阵,它的列显示一些值等于-99.

我想分别计算每列的平均值,因为我正在使用 构建一个表fprintf我希望计算的平均值不包括-99值。

例如,采取 matrix A,我试过

mean(A(A(:,1) ~= -99))

它适用于计算第一列的平均值。

但是,当我尝试

mean(A(A(:,2) ~= -99))

对于第二列,结果与第一列的结果完全相同

那有什么问题?非常感谢您的提示!

4

4 回答 4

1

简而言之:您需要在读取值时指定列:

mean(A(A(:,2) ~= -99, 2))

更长的版本:A(:,1) ~= -99返回一个1000 x 1逻辑数组,A(:,2) ~= -99. 当使用逻辑数组进行索引时,Matlab 有效地展平了两个数组,并提取了逻辑数组的值true

如果逻辑数组BM元素并且被索引到的数组, A, 有N元素M <= NMatlab 将只对ie的第一个M元素进行操作将等价于*BC = A(B)

C = A(1:M);
C = C(B);

在您的示例中,您正在1000 x 7使用1000 x 1逻辑数组对数组进行索引,这使得所有调用仅考虑前 1000 个元素,即第一列。因此,您需要指定要应用逻辑索引的列。

*如果B是一个1xM数组,则结果数组也将被重新整形为一个1xM数组,对于所有其他情况,Mx1返回一个数组。

于 2013-03-25T19:51:04.653 回答
1

您仅将索引值带到第一列。

尝试

mean(A(A(:,2) ~= -99),2)第二列的 %

于 2013-03-25T19:16:24.247 回答
0

您正在使用向量 ,A(:,1)~=-99来索引数组,因此它仅访问第一列中的值。下面是一个示例,说明如何对数组中的每一列进行此计算:

A = [1 2 3; -99, 4, 3; 10 4 8];

for col = 1:3
    index = A(:,col) ~= -99;
    mean(A(index,col))
end
于 2013-03-25T19:33:12.623 回答
0

例如,您需要的是第一列:

mean(A(find(A(:,1) ~= -99),1))

例如:

>> A

A =

     1     2
     1     3
   -99     4
     1     5

然后,

>> find(A(:,1)~=-99)

ans =

     1
     2
     4

和,

>> mean(A(find(A(:,1)~=-99),1))

ans =

     1
于 2013-03-25T19:21:54.797 回答