finding index of a function

2 views (last 30 days)
shobhit mehrotra on 27 Jan 2015
Answered: Thomas Feja on 27 Jan 2015
Hello, I have the following code, When the cell array is created it contains values of AA when the condition is meet. I want to also create a cell array of the index of AA, AA(n) n = 1:length AA.
AA = [ 1 2 3 5 7 10 9 11 13 14 17 19 17 22 25];
data = mat2cell(AA, 1, diff([0 find(diff(AA) < 0) numel(AA)]))
Thanks!
shobhit mehrotra on 27 Jan 2015
Im trying to create another data cell array with indices that meet the condition. dataind = [(1, 2, 3, 4, 5, 6), (7,8,9, 10, 11, 12), (13,14,15)]

Thomas Feja on 27 Jan 2015
If you want go for a single line solution, this will work:
data = arrayfun(@(x,y)x:y,[1,1+find(diff(AA)<0)],[find(diff(AA)<0),numel(AA)],'UniformOutput',false)
This is compact but hard to read. So you might prefer this solution:
idxNegDiff = [find(diff(AA)<0),numel(AA)];
start = 1;
for idx = 1:length(idxNegDiff)
c{idx} = start:idxNegDiff(idx);
start = idxNegDiff(idx)+1;
end
Either way you can verify the result using:
celldisp(c)

Categories

Find more on Matrix Indexing in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!