Restructure/align struct by interpollation/padding

Having a 3x1 struct s with fields x and y, where (if represented in a form of a table):
x y
[1;2] ['a';'b']
[2;4] ['c';'d']
[1;3;4] ['f';'g';'h']
I need to restructure the struct so that the values in each field of x and y are padded/interpollated by zeros so that they are of a uniform size and linearly spaced, "aligned" so to say, based on the series of [1;2;3;4] and the y field "mirrors" the padding/interpollation of x. The desired result is this:
x y
[1;2;0;0] ['a';'b'; 0 ; 0 ]
[0;2;0;4] [ 0 ;'c'; 0 ;'d']
[1;0;3;4] ['f'; 0 ;'g';'h']
How do I achieve this in Matlab using it optimal methods like vectorization etc., please?

 Accepted Answer

Here is a possible solution
s(1).x = [1;2];
s(1).y = ['a';'b'];
s(2).x = [2;4];
s(2).y = ['c';'d'];
s(3).x = [1;3;4];
s(3).y = ['f';'g';'h'];
numberVector = min(vertcat(s.x)):max(vertcat(s.x))
s2 = repmat( struct('x', zeros(size(numberVector))', 'y', repmat('0', size(numberVector))') , size(s))
for i=1:length(s)
index = find(any(s(i).x'==numberVector',2));
s2(i).x(index) = numberVector(index)';
s2(i).y(index) = s(i).y;
end
s2 will contain the modified struct array.

2 Comments

Excellent! Thank you. Also, it is nice code for me to learn Matlab a little more by studying it.

Sign in to comment.

More Answers (0)

Categories

Community Treasure Hunt

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

Start Hunting!