create a new matrix with elements from different sized matrices

14 visualizaciones (últimos 30 días)
Sumedh Kulkarni
Sumedh Kulkarni el 26 de En. de 2018
Editada: Sumedh Kulkarni el 1 de Feb. de 2018
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!

Respuestas (2)

Youssef  Khmou
Youssef Khmou el 26 de En. de 2018
Editada: Walter Roberson el 26 de En. de 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);
  1 comentario
Sumedh Kulkarni
Sumedh Kulkarni el 26 de En. de 2018
I guess for this solution, matrix dimensions must be same. But in my case, they are not. One is 300*96 and the other is 300*2. I can`t compute difference between them. Also, I don`t want to find elements that equal 0, but the elements that are equal to other matrix`s 1st column.

Iniciar sesión para comentar.


Domanic
Domanic el 26 de En. de 2018
Editada: Domanic el 26 de En. de 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));
  1 comentario
Sumedh Kulkarni
Sumedh Kulkarni el 1 de Feb. de 2018
Dominac, this doesnt work either. I tried to use the example you provided, which works quite well. But for me, i think the elements of Matrix M have same values in some columns. Maybe that`s the reason? It looks something like this:
9 12 20 20 39
10 13 23 36 94
12 20 36 39 124
13 23 39 49 200
20 36 49 94 226
23 39 57 106 275
24 49 94 110 0
36 57 106 124 0
37 88 110 137 0
39 94 124 200 0
49 102 137 201 0
57 106 141 226 0
63 110 200 275 0
75 114 201 0 0
and t_e1 looks like this:
1 92
2 91
3 29
4 93
5 92
6 28
7 68
8 93
9 95
10 96
11 52
12 96
13 96
14 82
15 85
Basically, M(1,1) is t_e1(9,1) and I want element corresponding to t_e(9,1), which is t_e1(9,2) in the new matrix. This needs to be done for each element in matrix M.

Iniciar sesión para comentar.

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by