我有一个用零分割矢量的问题。
我有一个矢量例如
v = [1 3 2 6 4 0 0 2 4 6 0 0 0 3 1]
我需要得到像
这样的载体v1 = [1 3 2 6 4]
v2 = [2 4 6]
v3 = [3 1]
使用MATLAB函数有没有办法做到这一点?
当然,我不知道主矢量 v 中包含多少个子矢量以及有多少个零分隔矢量。
我不是程序员,也不是MATLAB的专业人士。 我知道这样做的程序方法,但是想要以某种方式通过MATLAB来做。
我找到了一个函数A = strsplit(str,delimiter)但是我没有字符串我有一个向量。 所以我搜索了转换功能。我发现S = char(V)但是当我执行它时它崩溃了。
答案 0 :(得分:3)
将输出作为单元格数组更好,而不是单独的变量。这样输出将更容易处理。
试试这个:
v = [1 3 2 6 4 0 0 2 4 6 0 0 0 3 1]; %// data
w = [false v~=0 false]; %// "close" v with zeros, and transform to logical
starts = find(w(2:end) & ~w(1:end-1)); %// find starts of runs of non-zeros
ends = find(~w(2:end) & w(1:end-1))-1; %// find ends of runs of non-zeros
result = arrayfun(@(s,e) v(s:e), starts, ends, 'uniformout', false); %// build result
结果(例如):
>> result{:}
ans =
1 3 2 6 4
ans =
2 4 6
ans =
3 1
答案 1 :(得分:2)
整个数字小于9的向量的strsplit()
解决方案(因此,对于一般解决方案,请参见Luis Mendo's),这是一个非常具体的解决方案。拆分并转换回数字:
res = strsplit(char(v), char(0));
res = cellfun(@(x) x - 0,res,'un',0);
celldisp(res)
res{1} =
1 3 2 6 4
res{2} =
2 4 6
res{3} =
3 1