不执行任务的 MATLAB 索引



MATLAB中是否有一个特殊的索引,当使用时不会诱导正在执行的操作?

换句话说,我可以通过用更智能的东西替换if子句来缩短以下代码吗?我的目标是在给定索引"合理"的情况下对它们执行一些操作,并且在给定特殊索引(例如-1,但可能还有其他更好的选择(的情况下什么都不做。

x = magic(3);
r = [ 1, 3 ]; % Do nothing: -1
if ~isequal( r, -1 )
x( r, : ) = 0;
end

如果r的唯一选项是索引向量或表示"无索引"的标量,则空数组是最佳解决方案。

但是,如果r始终是一个数组(即使大小为 1(,并且您只想跳过其中的"非索引"值,则可以键入:

x(r(r>0 & fix(r)==r),:)

第一部分r>0仅从r中获取正值。第二部分fix(r)==r仅从r中获取整数值。因此,您将获得一个r子集,其中只有可以作为索引的值,r(r>0 & fix(r)==r)用作x的行索引。

下面是一个示例:

r = [5 -1 0 0.3 nan 65 pi];
>> r(r>0 & fix(r)==r)
ans =
5    65

是的,你可以这样做

x(r(r~=-1),:) = 0

受到此注释和此答案的启发,只需使用空数组作为特殊索引,指示不应执行操作:

x = magic(3);
r = []; % [] % 1 % [ 1, 3 ]
x( r, : ) = 0

最新更新