[Scilab-users] Regarding simple numerical operations result display.

Berns Buenaobra berns.buenaobra at gmail.com
Tue Mar 19 04:17:50 CET 2013


Outstanding!

Thanks Stefan,

Berns B.


On Tue, Mar 19, 2013 at 12:23 AM, Stefan Du Rietz <sdr at durietz.se> wrote:

> But as usual there is a better (faster, simpler) solution without a loop!
>
> // sort in reverse order and get indices
> [ysort, k] = gsort(data(:, 2));
> // take indices of the 5 largest values
> k = k(1:5);
> // keep those data
> data = [data(k, :)];
>
> Regards
> Stefan
>
>
>
> On 2013-03-18 13:09, Stefan Du Rietz wrote:
> --------------------
>
>> Hi Berns,
>> I am not sure if I understand exactly what you mean.
>>
>> Perhaps something like this simplified example (to keep the 5 pairs
>> with the largest y-values)?
>>
>> x = (1:10)';
>> y = [1:5; 6:10]; y = y(:);
>> data = [x, y];
>> th = 1:10;   // threshold values
>>
>> data // display the original data
>> for k=1:length(th)
>>    index = data(:, 2) > th(k);
>>    if sum(index) < 5  // too few data values left
>>      break
>>    end
>>    data = data(index, :)  // display this result
>> end
>>
>> Output from the run:
>>   data  =
>>      1.     1.
>>      2.     6.
>>      3.     2.
>>      4.     7.
>>      5.     3.
>>      6.     8.
>>      7.     4.
>>      8.     9.
>>      9.     5.
>>      10.    10.
>>   data  =
>>      2.     6.
>>      3.     2.
>>      4.     7.
>>      5.     3.
>>      6.     8.
>>      7.     4.
>>      8.     9.
>>      9.     5.
>>      10.    10.
>>   data  =
>>      2.     6.
>>      4.     7.
>>      5.     3.
>>      6.     8.
>>      7.     4.
>>      8.     9.
>>      9.     5.
>>      10.    10.
>>   data  =
>>      2.     6.
>>      4.     7.
>>      6.     8.
>>      7.     4.
>>      8.     9.
>>      9.     5.
>>      10.    10.
>>   data  =
>>      2.     6.
>>      4.     7.
>>      6.     8.
>>      8.     9.
>>      9.     5.
>>      10.    10.
>>   data  =
>>      2.     6.
>>      4.     7.
>>      6.     8.
>>      8.     9.
>>      10.    10.
>>
>> Regards
>> Stefan
>>
>>
>> On 2013-03-18 01:25, Berns Buenaobra wrote:
>> --------------------
>>
>>> Hi Stefan:
>>>
>>> Maybe I should like to get some insight how to do this.
>>>
>>> What I have is two columns (or 2 column vectors) and they need to go
>>> in pairs say magnitude y and a position in x say P(x,y). Now what I
>>> wanted is to be able to detect peaks from a set threshold value - I
>>> would like to keep 10 values above it in memory and discard the rest.
>>> I I repeat the same action until I only get the highest of all these
>>> column vector magnitudes at the last threshold value. There is a
>>> uniform delta for each of the threshold value I use going from
>>> bottom up.
>>>
>>> Problem: I can detect the peaks alright but how does one ensure that
>>> it sticks to its position pair? Since indexing the magnitude seemed to
>>> a sequential location in memory and not its position?
>>>
>>> Thanks for any help.
>>>
>>> Regards,
>>> Berns B.
>>> USC Physics
>>>
>>>
>>>
>>>
>>> On Mon, Mar 18, 2013 at 5:24 AM, Stefan Du Rietz <sdr at durietz.se
>>> <mailto:sdr at durietz.se>> wrote:
>>>
>>>     But this is the ultimate solution without a loop:
>>>
>>>     -->bool2s(y>a) .* b + bool2s(~y>a) .* y
>>>       ans  =
>>>        - 11.  - 6.  - 1.    4.    100.
>>>
>>>     /Stefan
>>>
>>>
>>>     On 2013-03-17 22:05, Stefan Du Rietz wrote:
>>>     --------------------
>>>
>>>         Maybe one of the last two of these four loops was what you
>>> wanted:
>>>
>>>         -->bool2s(y>a)
>>>            ans  =
>>>               0.    0.    0.    0.    1.
>>>
>>>         -->for k=bool2s(y>a), if k, disp(b), else, disp(y), end, end
>>>             - 11.  - 6.  - 1.    4.    9.
>>>             - 11.  - 6.  - 1.    4.    9.
>>>             - 11.  - 6.  - 1.    4.    9.
>>>             - 11.  - 6.  - 1.    4.    9.
>>>               100.
>>>
>>>         -->for k=y, if k>a, disp(b), else, disp(y), end, end
>>>             - 11.  - 6.  - 1.    4.    9.
>>>             - 11.  - 6.  - 1.    4.    9.
>>>             - 11.  - 6.  - 1.    4.    9.
>>>             - 11.  - 6.  - 1.    4.    9.
>>>               100.
>>>
>>>         Here, k takes the value of each element in y:
>>>
>>>         -->for k=y, if k>a, disp(b), else, disp(k), end, end
>>>             - 11.
>>>             - 6.
>>>             - 1.
>>>               4.
>>>               100.
>>>
>>>         Or maybe this is easier to follow:
>>>
>>>         -->for k=1:length(y), if y(k)>a, disp(b), else, disp(y(k)),
>>>         end, end
>>>             - 11.
>>>             - 6.
>>>             - 1.
>>>               4.
>>>               100.
>>>
>>>         /Stefan
>>>
>>>         On 2013-03-17 20:46, Stefan Du Rietz wrote:
>>>         --------------------
>>>
>>>             Sorry,
>>>             I should have written (?):
>>>
>>>             A multi-element logical array is true (T) only if all
>>>             elements are T.
>>>             -->and(y>a)
>>>                ans  =
>>>                 F
>>>
>>>             /Stefan
>>>
>>>             On 2013-03-17 20:35, Stefan Du Rietz wrote:
>>>             --------------------
>>>
>>>                 -->y=(5*x)-1
>>>                    y  =
>>>                     - 11.  - 6.  - 1.    4.    9.
>>>
>>>                 -->y>a
>>>                    ans  =
>>>                     F F F F T
>>>
>>>                 This is F (the first element)
>>>
>>>                 /Stefan
>>>
>>>
>>>                 On 2013-03-17 20:23, Modestas Bunokas wrote:
>>>                 --------------------
>>>
>>>                     If someone will find 2 min of free time, I would
>>>                     be very grateful.
>>>                     I'm
>>>                     somehow getting weird result doing simple
>>>                     operation like:
>>>
>>>                     a=7;  b=100;  x=[-2:1:2];  y=(5*x)-1;
>>>                     if  y>a  then  disp(b);
>>>                           else  disp(y);
>>>                     end
>>>
>>>                     --> - 11.  - 6.  - 1.    4.    9.
>>>
>>>                     Last result (9) is wrong, it should be 100 (b). I
>>>                     fully understand
>>>                     that it's because of lack of my knowledge in
>>>                     programming but in few
>>>                     days I could not solve or even could not find any
>>>                     help. Because of
>>>                     that writing here.
>>>
>>>
>>>                     ______________________________**___________________
>>>                     users mailing list
>>>                     users at lists.scilab.org
>>> <mailto:users at lists.scilab.org**>
>>>                     http://lists.scilab.org/__**mailman/listinfo/users<http://lists.scilab.org/__mailman/listinfo/users>
>>>                     <http://lists.scilab.org/**mailman/listinfo/users<http://lists.scilab.org/mailman/listinfo/users>
>>> >
>>>
>>>
>>>                 ______________________________**___________________
>>>                 users mailing list
>>>                 users at lists.scilab.org <mailto:users at lists.scilab.org**>
>>>                 http://lists.scilab.org/__**mailman/listinfo/users<http://lists.scilab.org/__mailman/listinfo/users>
>>>                 <http://lists.scilab.org/**mailman/listinfo/users<http://lists.scilab.org/mailman/listinfo/users>
>>> >
>>>
>>>
>>>             ______________________________**___________________
>>>             users mailing list
>>>             users at lists.scilab.org <mailto:users at lists.scilab.org**>
>>>             http://lists.scilab.org/__**mailman/listinfo/users<http://lists.scilab.org/__mailman/listinfo/users>
>>>             <http://lists.scilab.org/**mailman/listinfo/users<http://lists.scilab.org/mailman/listinfo/users>
>>> >
>>>
>>>
>>>         ______________________________**___________________
>>>         users mailing list
>>>         users at lists.scilab.org <mailto:users at lists.scilab.org**>
>>>         http://lists.scilab.org/__**mailman/listinfo/users<http://lists.scilab.org/__mailman/listinfo/users>
>>>         <http://lists.scilab.org/**mailman/listinfo/users<http://lists.scilab.org/mailman/listinfo/users>
>>> >
>>>
>>>
>>>     ______________________________**___________________
>>>     users mailing list
>>>     users at lists.scilab.org <mailto:users at lists.scilab.org**>
>>>     http://lists.scilab.org/__**mailman/listinfo/users<http://lists.scilab.org/__mailman/listinfo/users>
>>>     <http://lists.scilab.org/**mailman/listinfo/users<http://lists.scilab.org/mailman/listinfo/users>
>>> >
>>>
>>>
>>>
>>>
>>> ______________________________**_________________
>>> users mailing list
>>> users at lists.scilab.org
>>> http://lists.scilab.org/**mailman/listinfo/users<http://lists.scilab.org/mailman/listinfo/users>
>>>
>>>
>> ______________________________**_________________
>> users mailing list
>> users at lists.scilab.org
>> http://lists.scilab.org/**mailman/listinfo/users<http://lists.scilab.org/mailman/listinfo/users>
>>
>>
> ______________________________**_________________
> users mailing list
> users at lists.scilab.org
> http://lists.scilab.org/**mailman/listinfo/users<http://lists.scilab.org/mailman/listinfo/users>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20130319/846295c6/attachment.htm>


More information about the users mailing list