没有执行任务的MATLAB索引
问题描述:
MATLAB中是否有一个特殊索引,在使用时不会导致正在执行的操作?没有执行任务的MATLAB索引
换句话说,我可以用更聪明的东西替代if
子句来缩短以下代码吗?我的目标是对给定索引执行一些操作,以防它们“明智”,并且在特定索引(如-1
,但可能有其他更好的选择)的情况下不做任何事情。
x = magic(3);
r = [ 1, 3 ]; % Do nothing: -1
if ~isequal(r, -1)
x(r, :) = 0;
end
答
如果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
答
是的,你可以做
x(r(r~=-1),:) = 0
你想检查是否'R(I)〜= -1'?因为现在你只需检查'r'不是标量'-1'。无论如何,你是否尝试过:'x(r(r> 0&fix(r)== r),:) = 0;'? – EBH
@EBH'-1'只是一个例子,我想也许你可以使用'NaN','inf'或'〜',但所有这些都不起作用,我应该更清楚。在任何情况下,我的理想解决方案都是使用一个空数组,'r = [];',这对我来说太明显了,一开始就看不到。不过谢谢你的灵感! – Discbrake