我有一个 1000x7 矩阵,它的列显示一些值等于-99
.
我想分别计算每列的平均值,因为我正在使用 构建一个表fprintf
,但我希望计算的平均值不包括-99
值。
例如,采取 matrix A
,我试过
mean(A(A(:,1) ~= -99))
它适用于计算第一列的平均值。
但是,当我尝试
mean(A(A(:,2) ~= -99))
对于第二列,结果与第一列的结果完全相同。
那有什么问题?非常感谢您的提示!
我有一个 1000x7 矩阵,它的列显示一些值等于-99
.
我想分别计算每列的平均值,因为我正在使用 构建一个表fprintf
,但我希望计算的平均值不包括-99
值。
例如,采取 matrix A
,我试过
mean(A(A(:,1) ~= -99))
它适用于计算第一列的平均值。
但是,当我尝试
mean(A(A(:,2) ~= -99))
对于第二列,结果与第一列的结果完全相同。
那有什么问题?非常感谢您的提示!
简而言之:您需要在读取值时指定列:
mean(A(A(:,2) ~= -99, 2))
更长的版本:A(:,1) ~= -99
返回一个1000 x 1
逻辑数组,A(:,2) ~= -99
. 当使用逻辑数组进行索引时,Matlab 有效地展平了两个数组,并提取了逻辑数组的值true
。
如果逻辑数组B
有M
元素并且被索引到的数组, A
, 有N
元素M <= N
Matlab 将只对ie的第一个M
元素进行操作将等价于*B
C = A(B)
C = A(1:M);
C = C(B);
在您的示例中,您正在1000 x 7
使用1000 x 1
逻辑数组对数组进行索引,这使得所有调用仅考虑前 1000 个元素,即第一列。因此,您需要指定要应用逻辑索引的列。
*如果B
是一个1xM
数组,则结果数组也将被重新整形为一个1xM
数组,对于所有其他情况,Mx1
返回一个数组。
您仅将索引值带到第一列。
尝试
mean(A(A(:,2) ~= -99),2)
第二列的 %
您正在使用向量 ,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
例如,您需要的是第一列:
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