Have any matrix's column same number?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Hello. I have a question. If you can help me, i am pleasure.
Question: Have any matrix's column same number?
In my idea, my code just find number of diagonal.
clc;
clear;
tic
sum=0;
A=[1 2 3;4 5 3;7 8 9];
B=size(A);
m=B(1,1);
n=B(1,2);
for i=1:m
for j=1:n
if((A(i,j) == A(j,j) || A(j,i) == A(i,i)) && i ~= j )
sum=sum+1;
end
end
end
if sum==0
disp('different')
else
disp('same')
end
A
toc
7 Kommentare
Joseph Cheng
am 19 Mai 2015
Stephen he is trying to say that in the code he has presented it marks the second example as "different" due to the fact that his code only checks the diagonals.
Antworten (3)
Joseph Cheng
am 19 Mai 2015
Bearbeitet: Joseph Cheng
am 19 Mai 2015
you can use the function unique() to determine if there are repeated values within the matrix
x = randi(10,4,4);
disp(x);
for ind = 1:size(x,2)
if numel(unique(x(:,ind)))<numel(x(:,ind))
disp('same')
else
disp('different')
end
end
1 Kommentar
Joseph Cheng
am 19 Mai 2015
if you only want 1 answer then
x = randi(10,4,4);
disp(x);
same = 0;
for ind = 1:size(x,2)
if numel(unique(x(:,ind)))<numel(x(:,ind))
same = same+1;
end
end
if same>0
disp('same');
else
disp('different');
end
Stephen23
am 19 Mai 2015
Bearbeitet: Stephen23
am 19 Mai 2015
Here is a very fast and simple solution that does not require any loops (i.e. fully vectorized code). An output of 0 indicates different, and output of 1 indicates same.
>> A = [1,2,3; 4,5,6; 7,8,9]
A =
1 2 3
4 5 6
7 8 9
>> any(any(0==diff(sort(A))))
ans =
0
>> A = [1,2,3; 4,5,6; 1,8,9]
A =
1 2 3
4 5 6
1 8 9
>> any(any(0==diff(sort(A))))
ans =
1
Here it is on your second example matrix:
>> A = [1,2,3; 4,5,3; 7,8,9]
A =
1 2 3
4 5 3
7 8 9
>> any(any(0==diff(sort(A))))
ans =
1
And if you want to know which column contains repeated values then simply remove one of the any commands:
>> any(0==diff(sort(A)))
ans =
0 0 1
This code works very simply: it sorts the columns, then uses diff to find if any adjacent values are the same. You can use the all(..) to control the if statement, like this:
if all(...)
disp('same')
else
disp('different')
end
1 Kommentar
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices 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!