matlab中find()函数的反函数是什么?

por*_*ast 3 indexing matlab

在Matlab中,我可以在这样的向量中找到所有非零条目:

>> v = [0 1 0 0 1]

v =

     0     1     0     0     1

>> indices = find(v)

indices =

     2     5
Run Code Online (Sandbox Code Playgroud)

假设我的向量v只能有01值,vindices向量中重现的简单方法是什么?

Dan*_*Dan 6

你必须知道形状v是什么(v例如,如果它是你的例子中的矢量多长时间),但是一旦你知道它是微不足道的:

n = 5;
v_reconstructed = zeros(1, n);
v_reconstructed(indices) = 1;
Run Code Online (Sandbox Code Playgroud)

如果你不知道多久v是,那么你将无法捕捉任何0经过最近的s 1v...

顺便说一句,如果您正在使用稀疏矩阵,那么您可能实际上想要这样:

v = sparse([0 1 0 0 1]);
v_reconstructed = full(v);
Run Code Online (Sandbox Code Playgroud)

  • 在第二行,`v_reconstructed(n)= 0;`可能更快 (2认同)
  • @SamRoberts 我假设您知道 `v` 的长度,也许它与您拥有的另一个向量的长度相同,或者只是已知 `n`,但是由于某种原因,`v` 本身并不存在: / 基本上我认为关于 `n` 的知识比对 `v` 的知识更不严格。 (2认同)
  • @Dan 好的,我想这是真的。好吧,无论如何,建议就在那里,以防万一您确实有可用的 `v`。 (2认同)
  • @Sam如果你有v,解决方案是`v_reconstructed = v;`:-) (2认同)

eaf*_*fit 6

我曾经使用 sparse 和 full 但现在我切换到 accumarray,因为它的格式更简单。

在你的例子中:

   v=accumarray([2;5],1)'
Run Code Online (Sandbox Code Playgroud)

此外,根据第一个 matlab 示例,您还可以循环值(我认为):

Create a 5-by-1 vector, summing values for repeated 1-D subscripts:
   subs = [1; 2; 4; 2; 4];
   A = accumarray(subs, 101:105)
Run Code Online (Sandbox Code Playgroud)

当然,根据它的名字,这个函数是为了做更漂亮的事情而构建的。