ismember error message "Subscript indices must either be real positive integers or logicals."
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
I have two matrices A and B, and the desired output in an attached csv file. To obtain the desired outcome I have run
[~,loc] = ismember(A(:,1),B(:,1));
CC = [A(:,1),B(loc,2)];
But I got an error message
Subscript indices must either be real positive integers or logicals.
Please advise.
2 Kommentare
Paolo
am 3 Jun. 2018
In the .csv file you provided, each value in A has its own cell. However for data in B, you have multiple values in single cells. Is this intended? I noticed using readtable to read the .csv file.
Antworten (1)
monika shivhare
am 3 Jun. 2018
Bearbeitet: monika shivhare
am 3 Jun. 2018
[Lia,Locb] = ismember(X,Y)
Determines which elements of X are also in Y as well as their corresponding locations in B. Locb is array of size(X), with value at Locb(i) as location of value X(i) in array Y if X(i) is present in Y else zero.
Since some elements of A(:,1) are not present in B(:,1), loc contains some zero elements.In question above, loc=[1,2,4,0,0,0,0,0,0,0,0]. When using B(loc,2) you are trying to use all the elements of loc as index for B. In MATLAB, only positive integer index are allowed, hence it is showing error.
If you want to access values in 2nd column of B at rows where elements of A(:,1) is a member of B(:,1) you can use:
[~,loc] = ismember(A(:,1),B(:,1));
b=B(nonzeros(loc),2)
Now again, you cannot concatenate A(:,1) and b because A(:,1) is 11*1 while b is 3*1 .
Hence CC= [A(:,1),b]; will cause an error "Dimensions of matrices being concatenated are not consistent.".If you want to make it a column, then use
CC= [A(:,1);b];
If you want to concatenate A(:,1) with a array with value B(second column) where A(1st column) values are present in B(1st column), we have to pad other values with zeros and than concatenate them row-wise to make a 11*2 matrix.
[n,~]=size(A);
b=zeros(n,1);
for i=1:n
if(loc(i))
b(i)=B(loc(i),2);
end
end
CC=[A(:,1),b];
0 Kommentare
Siehe auch
Kategorien
Mehr zu Structures finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!