How to check if all the data in the cell array are the same?

49 Ansichten (letzte 30 Tage)
niniki
niniki am 21 Mär. 2022
Kommentiert: Jan am 21 Mär. 2022
There is a variable called 'data'
in a cell array of 1x10
{100} {100} {100} {100} {100} {100} {100} {100} {100} {100} 100 has the same value.
How can I return these 10 data to True or False?
isequal(data(1),data(2),data(3),data(4),data(5),data(6),data(7),data(8),data(9),data(10))
Instead of writing down all the elements like this, I want to make sure that all the data in th
e cell array has the same value even if the size of the cell array changes.

Antworten (3)

Stephen23
Stephen23 am 21 Mär. 2022
Bearbeitet: Stephen23 am 21 Mär. 2022
The simple and very efficient MATLAB approach is to use a comma-separated list:
Avoid approaches which join the data together (e.g. CELL2MAT) or that change data type (e.g. to STRING): they are inefficient, fragile, and will fail for arrays of incompatible sizes, types, or due to loss of information when converting type.
C = repmat({10},1,9)
C = 1×9 cell array
{[10]} {[10]} {[10]} {[10]} {[10]} {[10]} {[10]} {[10]} {[10]}
X = isequal(C{:})
X = logical
1
C{1} = 10+eps(10)
C = 1×9 cell array
{[10.0000]} {[10]} {[10]} {[10]} {[10]} {[10]} {[10]} {[10]} {[10]}
X = isequal(C{:})
X = logical
0

Chunru
Chunru am 21 Mär. 2022
c = {100, 100, 100, 200} % cell array
c = 1×4 cell array
{[100]} {[100]} {[100]} {[200]}
cm = cell2mat(c);
same = all(cm == cm(1))
same = logical
0

Arif Hoq
Arif Hoq am 21 Mär. 2022
if you want to find every index for true or false
A={100};
B=repmat(A,1,10);
[Lia Locb]=ismember(string(B),string({100}))
Lia = 1×10 logical array
1 1 1 1 1 1 1 1 1 1
Locb = 1×10
1 1 1 1 1 1 1 1 1 1
  1 Kommentar
Jan
Jan am 21 Mär. 2022
The conversion to a string is an expensive indirection. isequal(A{:}) is faster.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Cell Arrays 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!

Translated by