MATLAB中是否有一个特殊的索引,在使用时不会导致正在执行的操作?
换句话说,我可以通过用更聪明的东西替换if
子句来缩短以下代码吗?我的目标是在给定索引“敏感”的情况下执行某些操作,并且在特殊索引(例如-1
,但可能有其他更好的选择)的情况下不执行任何操作。
x = magic(3);
r = [ 1, 3 ]; % Do nothing: -1
if ~isequal( r, -1 )
x( r, : ) = 0;
end
答案 0 :(得分:1)
是的,你可以做到
x(r(r~=-1),:) = 0
答案 1 :(得分:1)
受此comment和此answer的启发,只需使用空数组作为指示不应执行操作的特殊索引:
x = magic(3);
r = []; % [] % 1 % [ 1, 3 ]
x( r, : ) = 0
答案 2 :(得分:1)
如果r
的唯一选项是索引向量或表示“无索引”的标量,则empty array是最佳解决方案。
但是,如果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