# Detecting Entire Column has the same integer value

3 views (last 30 days)
Yunus Yilmaz on 26 Nov 2019
Edited: Adam Danz on 30 Nov 2019
Hello, I need to determine whether the entire row has the same integer value. For example;
A=[1 1;
1 0.5;
1 0.5]; The first column is all ones. Therefore, I need ans = [1 0]
However,
A=[0.5 -1
0.5 0
0.5 1]; The first column is all 0.5. I need ans = [0 0]

Show 1 older comment
Image Analyst on 26 Nov 2019
Adam, in the second example, the result for column 1 is zero because there are no integers in that column (0.5 is not an integer).
Yunus Yilmaz on 26 Nov 2019
Image Analyst is right. Let me introduce one more example
If A = [0.5 1
0.5 1
0.5 1] the ans should be ans = [0 1]
Adam Danz on 26 Nov 2019
ahhh..... right.
I updated my answer to account for integers.

Stijn Haenen on 26 Nov 2019
Try this:
if a(:,1)==a(1,1)&mod(a(1,1),1)==0
Ans=[1 0];
else
Ans=[0 0];
end

Yunus Yilmaz on 26 Nov 2019
Adam Danz on 26 Nov 2019
This solution only analyzes the first column which would produce the following result which indicates that col 2 does not contain duplicate integers, but it does.
a=[1 1;
1 2;
1 2];
Ans = [1,0]
See my answer for a simpler and cleaner solution that generalizes to any number of columns and considers all columns.

Adam Danz on 26 Nov 2019
Edited: Adam Danz on 26 Nov 2019
To determine which columns contain identical values,
A=[1 1;
1 0.5;
1 0.5];
B = all(diff(A,[],1) == 0,1) % B = [1,0]
To determine which columns contain identical values that are integers,
B = all(diff(A,[],1) == 0,1) & mod(A(1,:),1)==0

Image Analyst on 26 Nov 2019
Here's another way that works, though probably not the most compact
A=[1 1;
1 0.5;
1 0.5] % The first column is all ones. Therefore, I need ans = [1 0]
% Set non-integers to nan
[rows, columns] =size(A);
output = zeros(1, columns); % Preallocate output.
for col = 1 : columns
% Set output to 1 if all of the values equal the first value.
output(col) = all(A(:, col) == A(1, col));
end
end
output % Echo to command window.
A=[0.5 -1
0.5 0
0.5 1] % The first column is all 0.5. I need ans = [0 0]
% Set non-integers to nan
[rows, columns] =size(A);
output = zeros(1, columns); % Preallocate output.
for col = 1 : columns
% Set output to 1 if all of the values equal the first value.