选择向量中除一个之外的所有元素

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 一样工作,但构建一个逻辑掩码而不是显式索引列表。

【讨论】:

以上是关于选择向量中除一个之外的所有元素的主要内容,如果未能解决你的问题,请参考以下文章

选择除第一个之外的所有“tr”

如何清除向量中的所有元素,除了C++中向量中的最后一个元素

选择 Mariadb 中除顶行以外的所有行

jQuery删除除第一行之外的所有表行

您可以选择除 1 或 2 个字段之外的所有内容,而不会出现作家抽筋吗?

如何选择表格中除一列以外的所有列?