用于不执行任务的MATLAB索引

时间:2017-08-05 16:32:31

标签: matlab indexing

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

换句话说,我可以通过用更聪明的东西替换if子句来缩短以下代码吗?我的目标是在给定索引“敏感”的情况下执行某些操作,并且在特殊索引(例如-1,但可能有其他更好的选择)的情况下不执行任何操作。

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

3 个答案:

答案 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