在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
只能有0
和1
值,v
从indices
向量中重现的简单方法是什么?
你必须知道形状v
是什么(v
例如,如果它是你的例子中的矢量多长时间),但是一旦你知道它是微不足道的:
n = 5;
v_reconstructed = zeros(1, n);
v_reconstructed(indices) = 1;
Run Code Online (Sandbox Code Playgroud)
如果你不知道多久v
是,那么你将无法捕捉任何0
经过最近的s 1
中v
...
顺便说一句,如果您正在使用稀疏矩阵,那么您可能实际上想要这样:
v = sparse([0 1 0 0 1]);
v_reconstructed = full(v);
Run Code Online (Sandbox Code Playgroud)
我曾经使用 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)
当然,根据它的名字,这个函数是为了做更漂亮的事情而构建的。