Need a method to arrange data ?

1 次查看(过去 30 天)
How can i arrange a array a = [1 2 3 4 3 4 5 3 3 4 2 3 3 4 1 2 3 3 4];
here the numbers 1 ,2 ,...are the order or level in the hierarchy , 1 is top level. 2 is below 1 , 3 is below level 2 and so on.
from first occurence of 1 till next is 1 group of data .
Now i need to arrange array a into array b like this : b =[4 3 5 4 3 3 4 3 2 3 4 3 2 1 3 4 3 2 1];
here tree is like this for data from first 1 till next 1 in array a, i.e.: 1 2 3 4 3 4 5 3 3 4 2 3 3 4
1{
2{
3{
4{
} first 2 elements in array b are 4 ,3 from this part of tree.
}
3{
4{
5{
} next 3 elements in b are 5 ,4, 3 ,and so on..
}
}
3{
}
3{
4{
}
}
}
2{
3{
}
3{
4{
}
}
}
}
  3 个评论
Jan
Jan 2012-8-18
I agree: The relation between a and b is not sufficiently explained.
Rajan
Rajan 2012-8-19
sorry I am not able put this question rightly , I'll try once more a = [1 2 3 4 3 4 5 3 3 4 2 3 3 4 1 2 3 3 4]; let a =[a1 a2]; a1=[1 2 3 4 3 4 5 3 3 4 2 3 3 4]; a2 = [ 1 2 3 3 4] ;
I need b = [b1 b2]; from a1 --> b1 = [4 3 5 4 3 3 4 3 2 3 4 3 2 1]; from a1 --> b2 = [3 4 3 2 1];
To explain relation between a and b , consider a1=[1 2 3 4 3 4 5 3 3 4 2 3 3 4]; I am reading a text file which is as folows: data{
1{
2{
3{
4{
data of level 4;
}
data of 1st level 3; % now b1 = [4 , 3]
}
3{
4{
5{
data of level 5
}
data of level 4
}
data of 2nd level 3; % now b1 = [4 , 3 , 5 , 4 ,3] and soon,
}
3{
data of 3rd level 3;
}
3{
4{
data of level 4;
}
data of 4th level 3;
}
data of level 2 ;
}
2{
3{
data of 1st level 3; %this is first level 3 of second level 2.
}
3{
4{
data of level 4;
}
data of 2nd level 3;
}
data of level 2;
}
data of level 1; }
}%end of data.
Actually array b is the order in which the data of level occurs in the text file.
I hope this time the question is clear.

请先登录,再进行评论。

采纳的回答

Matt Fig
Matt Fig 2012-8-19
I am sure there is a more efficient way to do this, but I cannot see it right off.
I = find(a==1);
b = [];
for ii = 1:length(I)
if length(I)>=ii+1
A = a(I(ii):I(ii+1));
else
A = [a(I(ii):end) 1];
end
B = [];
D = [1 diff(A)];
cnt = 1;
while any(D<=0)
L = find(D<=0,1,'first');
L2 = L;
X = A(L);
Y = X+1;
while Y>X
Y = A(L-1);
B(cnt) = Y;
cnt = cnt + 1;
L = L-1;
end
A(L:L2-1) = [];
D = [1 diff(A)];
end
b = [b B];
end
b

更多回答(1 个)

Azzi Abdelmalek
Azzi Abdelmalek 2012-8-18
try this
a = [1 2 3 4 3 4 5 3 3 4 2 3 3 4 1 2 3 3 4];a3=a(3:end);
d=diff(a3);f=find(d<=0);n=length(f);
v=[];k0=1;
for k=1:n
if f(k)>1
v1=a3(k0:f(k))
w=find(or(v1==a(1),v1==a(2)));m=length(w)
if m==1
v=[v v1(1) fliplr(a3(k0+1:f(k)))]
elseif m==2 & f(k)>2
v=[v fliplr(v1(1:2)) fliplr(a3(k0+2:f(k)))]
elseif m==2 & f(k)==2
v=[v fliplr(v1(1:2))]
else
v=[v fliplr(v1)]
end
else
v=[v a3(f(k))]
end
if k<n;k0=f(k)+1,end
end
na3=length(a3);nv=length(v);
if nv<na3
v=[v fliplr(a3(nv+1:end))]
end
v=[v fliplr(a(1:2))]
  1 个评论
Rajan
Rajan 2012-8-19
Hi Azzi , Thanks for this ans , But this is right only when 'a' takes the above values;
If a =[1 1 2 2 3 4 3 3 4];
The above code gives
v = [2 4 3 2 3 4 3 1 1];
but expected value of v is v= [1 2 4 3 3 4 3 2 1];
I think this was my fault because question posted was not clear. Please see the above comment of mine .

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Programming 的更多信息

标签

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by