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?

 Respuesta aceptada

Ameer Hamza
Ameer Hamza el 19 de Mayo de 2018
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 comentarios

Jiri Zurek
Jiri Zurek el 20 de Mayo de 2018
Excellent! Thank you. Also, it is nice code for me to learn Matlab a little more by studying it.
Ameer Hamza
Ameer Hamza el 20 de Mayo de 2018
You are welcome.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Preguntada:

el 5 de Mayo de 2018

Comentada:

el 20 de Mayo de 2018

Community Treasure Hunt

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

Start Hunting!

Translated by