[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