How to extract a column from cell arrays matrix?

Dear MATLAB users,
I wish I got your help for this problem. I have built a cell arrays as a matrix as follow
for k=1:5
out{k}(1,:}=
out{k}(2,:}=
out{k}(3,:}=
end
I am trying to extract the the first element in first array from each cell. i have tried this out{1:5}(1,1) but it does not work however if i type out{1}(1,1) this give the first element but in specific cell also out{1:5} shows all cell matrices. The error I saw when i tried out{1:5}(1,1) was Expected one output from a curly brace or dot indexing expression, but there were 5 results.
Thank you in advance. Best Aziz

3 Kommentare

Stephen23
Stephen23 am 29 Apr. 2017
You should consider simplifying how your data is arranged. Simpler data means simpler code. Simpler code means code is easier to write, and has fewer bugs.
For example this data might be better stored in an ND cell array, or perhaps even a simple numeric array (vector/matrix/ND).
Thank you Stephen, you are totally right. I just do some adjustment to an old code. I will consider your advice in the future. Appreciate it
Abdulaziz Abutunis comments to Stephen:
He did not solve the problem but he did give a good advice to avoid this problem in the future. he even gave more than one option.

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

per isakson
per isakson am 29 Apr. 2017

3 Stimmen

One way
>> cellfun( @(a) a(1,1), out )
ans =
0.9572 0.0357 0.7060 0.0344 0.7094
however, a for-loop might be a better choice

6 Kommentare

Thank you per isakson this is exactly what i am looking for... appreciate it
Abdulaziz Abutunis comments to per isakson
I could not find similar answer to my question and he provided it in an easy way
Hi per isakson, I am a little greedy :) and looking for extra assistance. Do you know if it is possible to write a number say 1 to the column we read earlier. Thank you in advance.
It might be easier is you save your data out to a .mat file and attach it. Then he could write code using your actual data.
@Abdulaziz Abutunis, Create some sample data
for ii = 1:5
for jj = 1:3
out{ii}(jj,:) = ii*100 + jj*10 + (1:3)';
end
end
Inspect the value of the first cell
>> out{1}
ans =
111 112 113
121 122 123
131 132 133
Inspect one specific element of the value of the first cell
>> out{1}(3,2)
ans =
132
>>
Caveat: I'm not sure I understood your question.
I should have said thanks again a long time ago:). I already used your suggestions
Thanks a lot

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Image Analyst
Image Analyst am 29 Apr. 2017
Bearbeitet: Image Analyst am 29 Apr. 2017

1 Stimme

You can't have out{k}(1,:} because you got two closing braces and no closing parenthesis. Maybe you meant out{k}(1,:). See the FAQ: http://matlab.wikia.com/wiki/FAQ#What_is_a_cell_array.3F and try to avoid cell arrays in most cases, definitelyif you have rectangular numerical array of constant dimensions, it just complicates things.

1 Kommentar

you right it was a typo sorry and thanks for pointing this out

Melden Sie sich an, um zu kommentieren.

Juvinch Vicente
Juvinch Vicente am 15 Aug. 2018
Bearbeitet: Juvinch Vicente am 15 Aug. 2018

1 Stimme

I'm not sure if this would work for the older version, but for version above 2016b, this line works.
cellMatrix = {'A', 'B', 'C'; 'A', 'B', 'C';'A', 'B', 'C'};
if you want the first column,
firstCol = cellMatrix(:,1);
and so forth.

1 Kommentar

Thank you Juvinch for the suggestion. I will consider when I use the cell array again

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by