Elementwise diff() with an condition

8 views (last 30 days)
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)

Accepted Answer

ChristianW
ChristianW on 13 Mar 2013
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 Comment
Philipp
Philipp on 13 Mar 2013
Edited: Philipp on 13 Mar 2013
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 :)

Sign in to comment.

More Answers (1)

Azzi Abdelmalek
Azzi Abdelmalek on 13 Mar 2013
Edited: Azzi Abdelmalek on 13 Mar 2013
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

Categories

Find more on Numerical Integration and Differential Equations in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!