Hi,
I have the following cell array
TEST = [1] [] [] [] []
I want to get the index position of the non-empty cell. I know I can do this using a loop, but is there any single command (like "find") that will do this?
Thank you!
JF

 채택된 답변

Honglei Chen
Honglei Chen 2012년 6월 28일
편집: Honglei Chen 2012년 6월 28일

33 개 추천

x = {1,[],[],[]};
find(~cellfun(@isempty,x))

댓글 수: 6

John F
John F 2012년 6월 28일
Thanks a lot!
Jan
Jan 2012년 6월 28일
And as usual I mention that "cellfun('isempty', x)" is faster. Although the documentation claims, that this style is kept for backward compatibility only, the string commands are built into the Mex, while the function handle commands require a return to the Matlab interpreter for each cell element.
Honglei Chen
Honglei Chen 2012년 6월 28일
Never thought about that but it surely is good to know, thanks Jan.
The change in performance is significant for very large cells:
>> x=cell(10000000, 1);
>> x(1980) = {1};
>> tic; find(~cellfun(@isempty, x)); toc
Elapsed time is 5.852150 seconds.
>>
>> tic; find(~cellfun('isempty', x)); toc
Elapsed time is 0.041747 seconds.
a={1 [] [];2 [] 4;5 6 []} find(~cellfun(@isempty,a)) ans =
1
2
3
6
8
Here I'm getting answer in column wise. But How to get row wise answer.
That's means I wanna get
ans=1 4 6 7 8 .
How to get it?
Serge Kogan
Serge Kogan 2020년 10월 21일
Md. Mubarak Hossain, You can get it by transposing the cell array a :
a={1 [] [];2 [] 4;5 6 []};
find(~cellfun(@isempty,a'))

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Attila
Attila 2017년 5월 16일

1 개 추천

Dear Mubarak,
This will work : find(~cellfun(@isempty,a'));

카테고리

도움말 센터File Exchange에서 Matrix Indexing에 대해 자세히 알아보기

질문:

2012년 6월 28일

댓글:

2020년 10월 21일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by