Does matlab have any function that can compare multiple numbers and return logical value zero or one?
조회 수: 23 (최근 30일)
이전 댓글 표시
I need to find a matlab function that does this:
F(2,3,4)=0
F(2,2,2)=1
F(5,6,7,8,9,2)=0
F(6,6,6,6,6,6,6,6)=1
if all inputs that are numeric are equal, the function returns 1 and if all are not equal, function returns 0. In the first exaple, 2 and 3 and 4 are not equal so the function returned 0. In the second example all inputs are 2 so the function returned 1. Does matlab have such function?
댓글 수: 2
David Hill
2020년 1월 31일
You need to explain more. I cannot determine what you want. F cannot be 3,6, and 8 dimensional at the same time.
채택된 답변
Stephen23
2020년 2월 1일
>> F = @(varargin)isequal(varargin{:});
>> F(2,3,4)
ans = 0
>> F(2,2,2)
ans = 1
>> F(5,6,7,8,9,2)
ans = 0
>> F(6,6,6,6,6,6,6,6)
ans = 1
댓글 수: 0
추가 답변 (3개)
Guillaume
2020년 1월 31일
Assuming your input is a vector:
all(diff(yourvector) == 0)
is what you want:
>> all(diff([2, 3, 4]) == 0)
ans =
logical
0
>> all(diff([2, 2, 2]) == 0)
ans =
logical
1
>> all(diff([5, 6, 7, 8, 9, 2]) == 0)
ans =
logical
0
>> all(diff([6, 6, 6, 6, 6, 6, 6, 6]) == 0)
ans =
logical
1
댓글 수: 0
Rik
2020년 2월 1일
Another of the many strategies: count the number of elements a unique() call gives you. (when I'm back at a computer I'll test the performance of the answers so far)
F=@(varargin) 1==numel(unique([varargin{:}]));
댓글 수: 0
GeeTwo
2022년 12월 27일
편집: GeeTwo
2022년 12월 27일
With a vector of singles or doubles, you could use ~std([a b c d]). If all the values are the same, the standard deviation will be zero, so the negation will be true.
Similar to star strider's function:
F=@(v)~std(v);
If you really want all of the inputs as separate arguments (again, singles or doubles),
function ans = allEqual(varargin)
~std(cell2mat(varargin));
end
댓글 수: 0
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!