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

时间:2014-09-19 10:10:17

标签: matlab indexing

在Matlab中,我可以在这样的矢量中找到所有非零项:

>> v = [0 1 0 0 1]

v =

     0     1     0     0     1

>> indices = find(v)

indices =

     2     5

假设我的向量v只能包含01值,那么从v向量重现indices的简单方法是什么?< / p>

2 个答案:

答案 0 :(得分:6)

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

n = 5;
v_reconstructed = zeros(1, n);
v_reconstructed(indices) = 1;

如果您不知道v有多长,那么在0中的最后1之后您将无法捕获任何v ...

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

v = sparse([0 1 0 0 1]);
v_reconstructed = full(v);

答案 1 :(得分:4)

我以前使用稀疏和完整但现在我切换到accumarray,因为它具有更简单的格式。

在你的例子中

   v=accumarray([2;5],1)'

另外,您还可以根据第一个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)

当然,根据它的名字,这个功能是为了做更好的事情。