【问题标题】:Complement subset in Matlab [duplicate]Matlab中的补集[重复]
【发布时间】:2013-03-13 09:20:01
【问题描述】:

在 R 中,我可以执行以下操作:

v <- 11:20
v[-(4:5)]

并获得11 12 13 16 17 18 19 20,因此所有索引除了是第 4 和第 5。

Matlab 的索引逻辑中是否有等价物?

不管我怎么想,我似乎没有正确的搜索词来谷歌我自己的这个相当基本的问题的结果。


注意:当然我可能会使用一些 set 函数,例如

v = 11:20;
v(setdiff(1:length(v), 4:5))

但是,这并不直观。

【问题讨论】:

  • 不直观,但有效。
  • 是的,它有效。但是有没有更优雅(也许更高效)的东西?
  • 澄清一下:v[-(4:5)] 是否删除了元素 4 和 5 或第四和第五个元素?
  • 哎呀,是的,这在我的问题中是未定义的。它应该删除第四个和第五个元素。编辑了问题。
  • 那么就很简单了。请参阅@EitanT 的答案。

标签: matlab matrix matrix-indexing


【解决方案1】:

另一种方法是简单地从数组中删除元素:

u = v;
u(4:5) = [];

我使用的是临时变量,因为我不知道修改原始数组v 是否可以接受。

【讨论】:

  • 是的,这实际上是一种——实际上非常明显的——方法。大概是要走的路吧。但是,需要额外的副本。
  • 如果您可以修改v 本身,则不必使用副本。
【解决方案2】:

我不认为有一种优雅的方式,但可能会有更高的性能

v = rand(1,10);
sel = true(1, numel(v));
sel( 4:5 ) = false;
v = v( sel );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 2018-02-13
    • 2014-10-22
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多