MATLAB Answers

[HELP] How to seperate cell with values greater than 230 into new cell.

32 views (last 30 days)
awda
awda on 17 Mar 2014
Answered: dpb on 18 Mar 2014
Hi
i have a problem seperating the Cell values with values greater than 230 into a new cell and values less than into another cell. i have data located in a 137242x1 Cell called V. and i want values bigger than 230 volt. to be imported into a new cell called Vnew.
This is supposed to be simple, but whenever i use > i get Error: Undefined function 'gt' for input arguments of type 'cell'.
its annoying...please help

  0 Comments

Sign in to comment.

Accepted Answer

Marta Salas
Marta Salas on 18 Mar 2014
Edited: Marta Salas on 18 Mar 2014
Not efficent, but it will do the job:
v = {231.06;231.37;227.39;227.8}
thresh = 230;
vidx = cellfun(@(x) x > thresh, v)
for i=1:size(vidx)
if(vidx(i) ==1)
v{i,2} = v{i,1};
end
end

  1 Comment

awda
awda on 18 Mar 2014
Thank you, this worked. i tried others method, but this was the one i wanted :D. thanks man

Sign in to comment.

More Answers (5)

Kevin Claytor
Kevin Claytor on 17 Mar 2014
cellfun is great for operating on cells;
v = {1,3,400, 3, 400, 5}
thresh = 230;
vidx = cellfun(@(x) x > thresh, v)
vnew = v(vidx)

  0 Comments

Sign in to comment.


dpb
dpb on 17 Mar 2014
You have to dereference the content of the cell -- "use the curlies, Luke".
newV={V{:}>230);
See documentation on using cell arrays for more details/examples.
cellfun is useful, but overkill for the single case.

  2 Comments

awda
awda on 17 Mar 2014
Thanks for answering, but i am afraid this does not do anything...i have tried that before. the errors i get is either:
Error using > Too many input arguments.
OR
Undefined function 'gt' for input arguments of type 'cell'.
dpb
dpb on 18 Mar 2014
Sorry, overlooked that it's a cell array instead a cell with double array. Use the [ ] to enclose the returned list.
newV={[V{:}]>230);
See "comma list" in the doc for more on using the results from cell arrays.

Sign in to comment.


awda
awda on 17 Mar 2014
Edited: awda on 17 Mar 2014
i an afraid non of the above is working. i tried cellfun still no luck.
but maybe i have to clarify the question abit more :) here is an example on the picture attached.
i have all the data into 1 aray cell..i want the values with over 230 to be moved or copied into a new cell named newV.
thanks for help

  0 Comments

Sign in to comment.


awda
awda on 18 Mar 2014
I thought it worked, but it did not :(..i activated V instead of ur v. but it stated an error. however i changed my cell into double...since it was string.

  0 Comments

Sign in to comment.


dpb
dpb on 18 Mar 2014
Looks like your first cell isn't numeric but text. Use
Vnew=V([false [V{2:end}]>230]);
where the extra false in the resulting logical addressing vector accounts for the "off by one" error since not using the first entry.
A trivial example here...
>> V
V =
[0.0497]
[0.9027]
[0.9448]
...
[0.3692]
[0.1112]
[0.7803]
>> Vnew=V([false [V{2:end}]>0.5])
Vnew =
[0.9027]
[0.9448]
[0.9001]
[0.7803]
>>

  0 Comments

Sign in to comment.

Sign in to answer this question.

Tags