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