# Assign matrix to struct

173 views (last 30 days)
Tiki Tiki on 23 Jul 2018
Commented: Tiki Tiki on 25 Jul 2018
Hi everyone
Can you help me for my code?.
I want to assign matrix b to struct g.a at position c.
g(1).a=[1 2 3 4]'
g(2).a=[1 1 3 4]'
g(3).a=[4 3 1 2]'
c=[1 2]
b=[ 3 3 3 3;4 5 4 4]'
My hope output is g.a =
3 4 4
3 5 3
3 4 1
3 4 2
Thank you so much.
Tiki Tiki on 24 Jul 2018
Thank. but actualy my problem is speed up. so i dont use For here. Can you help me more?

Guillaume on 23 Jul 2018
Edited: Guillaume on 23 Jul 2018
As per jan's comment, g.a means nothing. If you type g.a in the command window, you will get 3 outputs (3 times: ans = ...).
[g.a] will indeed return a matrix, which is the horizontal concatenation of all the outputs of g.a. However, [g.a] does not exist in the structure. I believe that you've misunderstood how structures work if that's what you want.
If you want to replace g(c(i)).a by b(:, i), then the easiest is a loop:
for col = 1:numel(c)
g(c(col)).a = b(:, col);
end
While it can be done without a loop, it's awkward and probably slower:
a = {g.a}; %concatenate all in a cell array
a(c) = num2cell(b, 1); %replace columns determined by c by columns in b
[g.a] = a{:}; %put back into structure
Tiki Tiki on 25 Jul 2018
How can I work this code on GPU? in my case, g.a is big size. and
because I work on each position of g.a, like get g(1).a or g(2).a,
so How do i change data?

KL on 23 Jul 2018
probably you mean something like this
g.a(:,1)=[1 2 3 4]';
g.a(:,2)=[1 1 3 4]';
g.a(:,3)=[4 3 1 2]'
c=[1 2]
b=[3 3 3 3;4 5 4 4]'
and then simply use c as indices in a
g.a(:,c) = b
Tiki Tiki on 24 Jul 2018
Sorry. I dont mean that. because this is a samples in my work. I defined code like that. so i cannot change. Can you help me?