在Matlab中,我可以在这样的矢量中找到所有非零项:
>> v = [0 1 0 0 1]
v =
0 1 0 0 1
>> indices = find(v)
indices =
2 5
假设我的向量v
只能包含0
和1
值,那么从v
向量重现indices
的简单方法是什么?< / p>
答案 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)
当然,根据它的名字,这个功能是为了做更好的事情。