How do I assign values to a matrix?

I have a 6×37 matrix of values ranging from 1-6 which are classes. stability_class is attached.
I want to assign values to four matrices a,b,d,e to be the same dimension with stability_class and have different entries when stability_class changes from 1-6 across rows and columns.
a=zeros(size(X));
b=zeros(size(X));
d=zeros(size(X));
e=zeros(size(X));
[c,f]=find(stability==1);
ind=[c,f];
i=ind(1:end,:);
j=ind(:,1:end);
for k=1:size(c,1)
a(i(k,1),j(k),2)=0.32;
b(i(k,1),j(k,2))=0.0004;
d(i(k,1),j(k,2))=0.24;
e(i(k,1),j(k,2))=0.0001;
end
[c, f]=find( stability==2);
ind=[c,f];
i=ind(1:end,:);
j=ind(:,1:end);
for k=1:size(c,1)
a(i(k,1),j(k,2))=0.32;
b(i(k,1),j(k,2))=0.0004;
d(i(k,1),j(k,2))=0.24;
e(i(k,1),j(k,2))=0.0001;
end
[c,f]=find(stability==3) ;
ind=[c,f];
i=ind(1:end,:);
j=ind(:,1:end);
for k=1:size(c,1)
a(i(k,1),j(k,2))=0.16;
b(i(k,1),j(k,2))=0.0004;
d(i(k,1),j(k,2))=0.12;
e(i(k,1),j(k,2))=0.00;
end
[c,f]= find(stability==4);
ind=[c,f];
i=ind(1:end,:);
j=ind(:,1:end);
for k=1:size(c,1)
a(i(k,1),j(k,2))=0.16;
b(i(k,1),j(k,2))=0.0004;
d(i(k,1),j(k,2))=0.12;
e(i(k,1),j(k,2))=0.00;
end
[c,f]=find(stability==5);
ind=[c,f];
i=ind(1:end,:);
j=ind(:,1:end);
for k=1:size(c,1)
a(i(k,1),j(k,2))=0.16;
b(i(k,1),j(k,2))=0.0004;
d(i(k,1),j(k,2))=0.14;
e(i(k,1),j(k,2))=0.0003;
end
[c,f]=find(stability==6);
ind=[c,f];
i=ind(1:end,:);
j=ind(:,1:end);
for k=1:size(c,1)
a(i(k,1),j(k,2))=0.11;
b(i(k,1),j(k,2))=0.0004;
d(i(k,1),j(k,2))=0.08;
e(i(k,1),j(k,2))=0.0015;
end
But I get a 3D array(x:y:z) for a with uncompleted matrices for b,d,e.

2 Comments

Question is not clear. What output you expect?
I want q 6×37 matrix for a,b,d,e

Sign in to comment.

 Accepted Answer

a=zeros(size(stability));
b=zeros(size(stability));
d=zeros(size(stability));
e=zeros(size(stability));
ind=find(stability==1);
a(ind)=0.32;
b(ind)=0.0004;
d(ind)=0.24;
e(ind)=0.0001;
ind=find( stability==2);
a(ind)=0.32;
b(ind)=0.0004;
d(ind)=0.24;
e(ind)=0.0001;
ind=find(stability==3) ;
a(ind)=0.16;
b(ind)=0.0004;
d(ind)=0.12;
e(ind)=0.00;
ind= find(stability==4);
a(ind)=0.16;
b(ind)=0.0004;
d(ind)=0.12;
e(ind)=0.00;
ind=find(stability==5);
a(ind)=0.16;
b(ind)=0.0004;
d(ind)=0.14;
e(ind)=0.0003;
ind=find(stability==6);
a(ind)=0.11;
b(ind)=0.0004;
d(ind)=0.08;
e(ind)=0.0015;

3 Comments

If you want more compact code put values in the Lookup Table rather than hard code it.
LUT=[...
0.32, 0.0004, 0.24, 0.0001;
0.32,0.0004,0.24,0.0001;
0.16,0.0004,0.12,0.00;
0.16,0.0004,0.12,0.00;
0.16,0.0004,0.14,0.0003;
0.11,0.0004,0.08,0.0015 ...
];
LUTfun = @(col) reshape(LUT(stability,col),size(stability));
a=LUTfun(1);
b=LUTfun(2);
c=LUTfun(3);
d=LUTfun(4);
find is not required, would be simpler and more efficient without.
I know I just want to change little to OP's code so he can still follow.

Sign in to comment.

More Answers (0)

Products

Release

R2017a

Community Treasure Hunt

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

Start Hunting!