选择向量中除一个之外的所有元素
Posted
技术标签:
【中文标题】选择向量中除一个之外的所有元素【英文标题】:Select all elements except one in a vector 【发布时间】:2013-11-04 22:49:35 【问题描述】:我的问题与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
【问题讨论】:
【参考方案1】:没有setdiff
() 的另一种选择是
vector(1:end ~= k)
【讨论】:
好电话。逻辑索引通常更可取,如果您在问题中只有一个标量k
,这将非常有用。【参考方案2】:
vector([1:k-1 k+1:end])
可以。不过,根据其他操作,可能会有更好的方法来处理这个问题。
为了完整起见,如果要删除一个元素,不需要走vector = vector([1:k-1 k+1:end])
路线,可以使用vector(k)=[];
【讨论】:
@Matteo 输入[1:0 2:5]
看看它是否输出你想要的。 ;-)(不尝试索引向量时,end
关键字将不起作用。)
感谢您的帮助!效果很好,也感谢vector(k)=[];
上的提示
@LuisMendo 我的意思是,在vector([1:k-1 k+1:end])
之外,您无法单独测试[1:k-1 k+1:end]
会给您一些k
的内容,因此我在测试示例中使用5
作为固定端1:0
可能是什么。【参考方案3】:
只是为了好玩,这是setdiff
的一个有趣的方式:
vector(setdiff(1:end,k))
除了使用setdiff
,你问这有什么有趣的?查看end
的位置。 MATLAB 的 end
keyword 在此上下文中转换为 vector
的最后一个索引,即使作为函数调用的参数而不是直接与 paren
一起使用(vector
的 ()
运算符)。无需使用numel(vector)
。换句话说,
>> vector=1:10;
>> k=6;
>> vector(setdiff(1:end,k))
ans =
1 2 3 4 5 7 8 9 10
>> setdiff(1:end,k)
Error using setdiff (line 81)
Not enough input arguments.
这在 IMO 中并不完全显而易见,但它可以在很多情况下派上用场,所以我想我会指出这一点。
【讨论】:
【参考方案4】:很简单:
newVector = vector([1:k-1 k+1:end]);
即使k
是第一个或最后一个元素,这也有效。
【讨论】:
【参考方案5】:%create a logic vector of same size:
l=ones(size(vector))==1;
l(k)=false;
vector(l);
【讨论】:
感谢您的回答!它有效,但我会坚持使用其他的,因为它们涉及的变量更少。【参考方案6】:您可以这样做的另一种方法是:一次排除多个索引(或单个索引......基本上它允许任何一个)是:
newVector = oldVector(~ismember(1:end,k))
实际上就像setdiff
一样工作,但构建一个逻辑掩码而不是显式索引列表。
【讨论】:
以上是关于选择向量中除一个之外的所有元素的主要内容,如果未能解决你的问题,请参考以下文章