MATLAB - 等效的逻辑索引导致两种不同的结果

时间:2017-06-28 01:28:12

标签: arrays matlab matrix matrix-indexing

我正在编写一段代码,通过在线评分员提交,如下所示。 B是一些给定数组填充任何/所有整数1到K,我想提取矩阵X的相应逻辑索引并对这些元素执行一些操作,放入返回数组:

for i = 1:K

   A = X(B == i, :);
   returnArr(i, :) = sum(A) / length(A);

end

这根本没有通过评分者,因此我希望改变我的方法,而是通过首先使用“find”函数间接索引数组X,如下所示:

for i = 1:K

    C = find(B == i);
    returnArr(i,:) = sum(X(C,:)) / length(C);

end

令我惊讶的是,这段代码没有任何问题地通过了评分员。我知道评分者之间存在大量差异,有人可能会以不同的方式处理特定的功能,但从MATLAB的功能/编码角度来看,我在两种方法之间的差异方面缺少什么?谢谢!

1 个答案:

答案 0 :(得分:1)

我认为问题在于:

length(C) == sum(B == i)

,而

length(A) == max([sum(B == i) , size(X , 2)])

换句话说,要获得与第一个示例相同的第二个示例的结果,您应该像这样修改它:

A = X(B == i , :);
returnArr(i, :) = sum(A) / size(A,1);

函数length返回最大数组维度的长度