Compare values of array of matrix 5x5x106
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
pamela sulis
am 20 Nov. 2015
Bearbeitet: Thorsten
am 20 Nov. 2015
Hi!
I have a array of logical matrix 5x5x106 (attached file): I want to compare every logical matrix with the others to find common elements end save them. I try this code:
for k=1:106
if valueNoZeros(:,:,k)==valueNoZeros(:,:,k+1)
a(:,:,k)=1;
end
end
and also this
for k=1:106
if valueNoZeros(:,:,k)==valueNoZeros(:,:,k+1)
for i=1:5
for j=1:5
a(i,j,k)=1;
end
end
end
end
but it gives me an error: 'Conversion to cell from double is not possible'
Can you help me?
0 Kommentare
Akzeptierte Antwort
Thorsten
am 20 Nov. 2015
Bearbeitet: Thorsten
am 20 Nov. 2015
If you want to compare every matrix with each other, you have 5565 pairs to compare:
Npairs = nchoosek(1:106,2);
N = size(Npairs, 1);
A = zeros(5,5,N);
for i = 1:N
A(:,:,i) = valueNoZeros(:,:,Npairs(i,1)) == valueNoZeros(:,:,Npairs(i,2));
end
If you just want to compare a matrix with the following matrix, you have 105 comparisons:
N = 106 - 1;
for i = 1:N
A(:,:,i) = valueNoZeros(:,:,i) == valueNoZeros(:,:,i+1);
end
2 Kommentare
Thorsten
am 20 Nov. 2015
Bearbeitet: Thorsten
am 20 Nov. 2015
valueNoZeros~=0 gives an 5x5x106 logical array that is logical 1 if valueNoZeros is one (valueNoZeros~=0) else 0. So this is just the same as valueNoZeros! Moreover, it is a whole array, which is only true if all elements are true; in the example, it is never true...
So if you want A to be 1 if there is a one in two matrices, use
A(:,:,i) = valueNoZeros(:,:,Npairs(i,1)) & valueNoZeros(:,:,Npairs(i,2));
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!