12 views (last 30 days)

Show older comments

The aim is to create a matrix (C_n) from two different matrices (M) and (t_e1) using a equality condition. I am trying to use the following code to do this. However,it gives me output as a matrix with zeros.

C_n=zeros(length(M),length(int));

for i= 1:length(int) %%length(int)=96

for j=1:length(M) %%length(M)=300

if M(j,i)==t_e1(j,1) %%t_e1 is of size 300*2 and M is 300*96

C_n(j,i)=t_e1(j,2); %%Want to check each element of M that equals (j,1)th element of t_e1

%%if true, replace each element of C_n by (j,2)th element of t_e1

end

end

end

What am I doing wrong in the above code?? Also, is there a better way to do get the required output (not using loops)?

Thank you!

Youssef Khmou
on 26 Jan 2018

Edited: Walter Roberson
on 26 Jan 2018

By computing the difference between the two matrices A and B, find the indexes of the entries that equal zero and replace the entries of matrix C with the inputs of the indexes:

example:

A=round(100*rand(4));

B=round(100*rand(4));

T=A-B;

C=zeros(size(A));

[a,b]=find(T==0);

C(a,b)=A(a,b);

Domanic
on 26 Jan 2018

Edited: Domanic
on 26 Jan 2018

I think the original code you had was correct, Sumedh. A minimum working example would be helpful, though. Try the following, which computes your loops on one line using logical vectors.

%%Set up example matrices

int = randi([0 3],[96 1]);

M=randi([0 3],[300 96]);

t_e1 = randi([0 3],[300, 2]);

%%Compute C_n

C_n = t_e1(:,2).*(M==t_e1(:,1));

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

Start Hunting!