MATLAB - 导致两个不同结果的等效逻辑索引
MATLAB - Equivalent logical indexing leading to two different results
我正在编写一段代码以通过在线评分器提交,如下所示。 B 是一些给定的数组,填充 any/all 整数 1 到 K,我想提取矩阵 X 的相应逻辑索引并对这些元素执行一些操作,以放入 return 数组:
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 functionality/coding 的角度来看,我在这两种方法之间的差异方面遗漏了什么?谢谢!
我认为问题在于:
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 returns 最大数组维度的长度
我正在编写一段代码以通过在线评分器提交,如下所示。 B 是一些给定的数组,填充 any/all 整数 1 到 K,我想提取矩阵 X 的相应逻辑索引并对这些元素执行一些操作,以放入 return 数组:
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 functionality/coding 的角度来看,我在这两种方法之间的差异方面遗漏了什么?谢谢!
我认为问题在于:
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 returns 最大数组维度的长度