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?

 채택된 답변

Ameer Hamza
Ameer Hamza 2018년 5월 19일
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

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

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Structures에 대해 자세히 알아보기

질문:

2018년 5월 5일

댓글:

2018년 5월 20일

Community Treasure Hunt

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

Start Hunting!

Translated by