How can I sorting the values in the jumping columns?
2 ビュー (過去 30 日間)
古いコメントを表示
I have a matrices 25x600 and some columns contains positive and negative values. I want to the output like this [+ + - -] (four values 2 positive and 2 negative). I am guaranteed to always have two positive values immediately before the transition and two negative values immediately after. my attempting was as follow :
clc;
clear all;
close all;
data=[-0.0059972;-0.004994;-0.0029881;2.0868e-05;0.0030299;0.013059;0.033115;0.063196;0.093273;0.1935;0.39385;0.69423;0.99448;1.9950;3.99550;6.99550;9.9957;19.9961;39.99620;69.9960;99.99530;199.99810;399.99140;699.98860;1000.03130]
for r=1:600
lam=data(:,r);
N_lam = length(lam);
for j=1:N_lam
kk=0;
r1=0;
if(sign(lam(j))==1)
kk=kk+1;
lampos(kk)=lam(j);
if (length(lampos(kk))>2 &length(lamneg(r1))>2)
break
end
else
r1=r1+1;
lamneg(r1)=lam(j);
end
end
cc{r}=[lampos lamneg];
end
Any help would be greatly appreciated. I will be grateful to you
3 件のコメント
Image Analyst
2015 年 2 月 13 日
First of all, you can't have a matrix like [+ + - -] - the best you can do is [1,1,-1,-1]. Or you could have any other values that have those signs I guess. But if that's it, then where, from an arbitrary matrix of a bunch of values, get those four values? You said "I want to the output like this [+ + - -] (four values 2 positive and 2 negative)." so which of the 15,000 elements would you extract to stick into the 4 element output array? Would I just pull 4 at random? I can't figure out what your for loop is doing - perhaps you can explain it in words. And it looks like it's looping over all elements so you will probably get more than 4 output values.
採用された回答
Guillaume
2015 年 2 月 13 日
You haven't answered my question about what you want as an output. Possibly this:
%note that your example data doesn't have any transition from + to -
%some other example data:
data = [1 2 3 4 -5 -6 -7 -8 9 10 -11 -12 -13 -14];
postoneg = find(diff(sign(data)) == -2)
transitions = data([postoneg-1; postoneg; postoneg+1; postoneg+2])
3 件のコメント
Guillaume
2015 年 2 月 14 日
Of course, you've got an empty array. You wrote I am guaranteed to always have two positive [...] before the transition and two negative [...] after. Your example is the exact opposite.
So, the question becomes, do you want positive to negative transitions as you've stated:
transitionindex = find(diff(sign(data)) == -2);
Do you want negative to positive transition as in your example:
transitionindex = find(diff(sign(data)) == 2);
Or both:
transitionindex = find(abs(diff(sign(data))) == 2);
Note that my answer applied to a row vector (as in my example). For a column vector, you need to concatenate the transition offsets horizontally instead of vertically (commas or spaces instead of semi-colons) ie:
transitions = data([transitionindex-1, transitionindex, transitionindex+1, transitionindex+2]);
Your question originally mention a matrix. You'll have to adapt the code for that as you've never explained what the output should be in that case.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Loops and Conditional Statements についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!