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

1 次查看(过去 30 天)
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

采纳的回答

Marta Salas
Marta Salas 2014-3-18
编辑:Marta Salas 2014-3-18
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

更多回答(5 个)

Kevin Claytor
Kevin Claytor 2014-3-17
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)

dpb
dpb 2014-3-17
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 个评论
awda
awda 2014-3-17
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 2014-3-18
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.

请先登录,再进行评论。


awda
awda 2014-3-17
编辑:awda 2014-3-17
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

awda
awda 2014-3-18
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.

dpb
dpb 2014-3-18
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]
>>

类别

Help CenterFile Exchange 中查找有关 Cell Arrays 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by