我的问题与this one非常相似,但我无法确定如何将答案应用于我的问题。
我循环遍历带有变量k
的向量,并希望选择除索引k
处的单个值之外的整个向量。
有什么想法吗?
for k = 1:length(vector)
newVector = vector( exluding index k); <---- what mask should I use?
% other operations to do with the newVector
end
答案 0 :(得分:27)
没有setdiff
()的另一种选择是
vector(1:end ~= k)
答案 1 :(得分:10)
vector([1:k-1 k+1:end])
会这样做。但是,根据其他操作,可能有更好的方法来处理这个问题。
为了完整性,如果您要删除一个元素,则无需转到vector = vector([1:k-1 k+1:end])
路线,可以使用vector(k)=[];
答案 2 :(得分:6)
只是为了好玩,这是setdiff
的一个有趣的方式:
vector(setdiff(1:end,k))
除了使用setdiff
之外,你有什么问题呢?查看end
的展示位置。 MATLAB的end
keyword转换为此上下文中vector
的最后一个索引,即使作为函数调用的参数而不是直接用于paren
(vector
的{{1}运营商)。无需使用()
。换句话说,
numel(vector)
这并不是完全明显的IMO,但它在许多情况下都会派上用场,所以我想我会指出这一点。
答案 3 :(得分:2)
非常简单:
newVector = vector([1:k-1 k+1:end]);
即使k
是第一个或最后一个元素,这也有效。
答案 4 :(得分:2)
%create a logic vector of same size:
l=ones(size(vector))==1;
l(k)=false;
vector(l);
答案 5 :(得分:0)
执行此操作的另一种方法是,允许您一次排除多个索引(或单个索引...基本上允许任何一个索引都是健壮的):
newVector = oldVector(~ismember(1:end,k))
确实像setdiff
一样工作,但是建立逻辑掩码而不是显式索引列表。