我正在编写一段代码,通过在线评分员提交,如下所示。 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的功能/编码角度来看,我在两种方法之间的差异方面缺少什么?谢谢!
答案 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返回最大数组维度的长度