Elementwise diff() with an condition

12 次查看(过去 30 天)
I have an array of cells which contains numeric arrays of different lengths, lets call that array X. I want to write a function that writes the diff(cell2mat(X(i))) to and array of cells Y(i). The problem is when I want to add a condition i.e. only write the diff of two elements in the result vector when the difference is <= B. Below my code:
function[Y] = diffleq2(X)
len = length(X);
for i = 1:len
Y(i) = {diff(cell2mat(X(i)))};
end
X is of the form of
X = {[1,2,4,5],[23,12,13]};
just with a lot more cells. Obviously the new function would look like this
function[Y] = diffleq2(X,B)

采纳的回答

ChristianW
ChristianW 2013-3-13
X = {[1,2,4,5],[23,12,13]};
Y = cellfun(@diff,X,'un',0);
B = 1.5;
Ycut = cellfun(@(x) x(abs(x)>B),Y,'un',0);
  1 个评论
Philipp
Philipp 2013-3-13
编辑:Philipp 2013-3-13
Thanks for the answer. The first part works nicely (I didn't know about the cellfun function) - this is great.
But I still have problem with the last line where I want to remove all entries > B. Ycut is just the same as Y. Can you explain me the syntax of the function you passed as argument?
Edit: Figured it out - thanks again :)

请先登录,再进行评论。

更多回答(1 个)

Azzi Abdelmalek
Azzi Abdelmalek 2013-3-13
编辑:Azzi Abdelmalek 2013-3-13
X = {[1,2,4,5],[23,12,13]}
B=1
for k=1:numel(X)
b=diff(X{k})
b(b>B)=[]
out{k}=b
end

类别

Help CenterFile Exchange 中查找有关 Numerical Integration and Differential Equations 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by