getting first element of each cell array with different sizes

52 ビュー (過去 30 日間)
sensation
sensation 2017 年 10 月 18 日
コメント済み: Stephen23 2019 年 7 月 10 日
Hi,
I have a 205 x 1 cell with diffferent sizes and I want to extract only the first element of each cell. For example, I have:
[8,14]
[10,14,15]
[9,14]
[5,14] etc till 205
and the result should be:
8
10
9
5.
Thanks a lot!
M.

採用された回答

Stephen23
Stephen23 2017 年 10 月 18 日
編集済み: Stephen23 2017 年 10 月 18 日
>> C = {[8,14];[10,14,15];[9,14];[5,14]};
>> cellfun(@(v)v(1),C)
ans =
8
10
9
5
  1 件のコメント
Stephen23
Stephen23 2017 年 10 月 18 日
And to allow for empty arrays:
>> C = {[8,14];[10,14,15];[9,14];[5,14];[]};
>> idx = ~cellfun('isempty',C);
>> out = zeros(size(C));
>> out(idx) = cellfun(@(v)v(1),C(idx))
out =
8
10
9
5
0

サインインしてコメントする。

その他の回答 (2 件)

Christian Keine
Christian Keine 2017 年 10 月 18 日
There are at least two possible ways this could be done. First, you could loop through the cell array and extract the first value of each cell. This is, however, probably not the most elegant or fastest solution. The second option is to use cellfun in combination with an anonymous function which extracts only the first value of each cell, which should work faster for large arrays and is easier to read.
To do so, first define the function that should be executed for each cell:
fun = @(x) x(1)
Then apply this function to each cell in the array using cellfun with x being you cell array
firstElement = cellfun(fun,x)
Using your data it would look like this:
x = {[8,14],[10,14,15],[9,14],[5,14]}
fun = @(x) x(1)
firstElement = cellfun(fun,x)
Hope this is helpful.
  3 件のコメント
sensation
sensation 2017 年 10 月 18 日
Just saw that I have in my data instead of number I have nan someties like:
[8,14]
[10,14,15]
[]
[9,14].
Do you know how to include also this in a way to put zero in an output if there is nothing in a cell like?
8
10
0
9
Thanks!
Stephen23
Stephen23 2017 年 10 月 18 日
@sensation: see my comment, which shows exactly how to do this.

サインインしてコメントする。


Daniel  Rieger
Daniel Rieger 2019 年 7 月 10 日
編集済み: Daniel Rieger 2019 年 7 月 10 日
Hello guys,
what if i only want to obtain the first entry of the first cell?
Or more general: what if i want a specific entry not for each but only for one cell?
I could also use and then cut out the entries that i dont need, but is there a more elegant way?
% N: wanted entry
all_entry = cellfun(@(v)v(1),C)
wanted_entry = all_entry(N)

カテゴリ

Help Center および File ExchangeOperators and Elementary Operations についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by