Difference between revisions of "LlListStatistics"

From Second Life Wiki
Jump to navigation Jump to search
(Undo ridiculous and pointless revision)
(Add an example showing expected results for each statistical operation on a sample list)
 
(3 intermediate revisions by 2 users not shown)
Line 5: Line 5:
|func_footnote=If a list entry type is not a float or an integer it is silently ignored.  
|func_footnote=If a list entry type is not a float or an integer it is silently ignored.  
|func_desc
|func_desc
|return_text=that is the result of performing statistical aggregate function '''operation''' on '''src'''.
|return_text=that is the result of performing statistical aggregate function {{LSLP|operation}} on {{LSLP|src}}.
|spec
|spec
|caveats
|caveats
Line 54: Line 54:
{{!}} {{#var:comment}}
{{!}} {{#var:comment}}
{{!}}}
{{!}}}
|examples=<lsl>// shows just how bad SL is behaving and demonstrates the use of llListStatistics()
|examples=
<source lang="lsl2">// Show results for each operation for a sample list
default
{
    state_entry()
    {
        list LX = [-1, 3.33, 17, "object", -4.5, 0.8675 ];
 
        llSay(0, "G.Mean= " + (string) llListStatistics(LIST_STAT_GEOMETRIC_MEAN, LX) );          // 0. 000000
        llSay(0, "Max= " + (string) llListStatistics(LIST_STAT_MAX, LX) );                        // 17.000000
        llSay(0, "Min= " + (string) llListStatistics(LIST_STAT_MIN, LX) );                        // -4.500000
        llSay(0, "Mean= " + (string) llListStatistics(LIST_STAT_MEAN, LX) );                      // 3.139500
        llSay(0, "Median= " + (string) llListStatistics(LIST_STAT_MEDIAN, LX) );                  // 0.867500
        llSay(0, "Count= " + (string) llListStatistics(LIST_STAT_NUM_COUNT, LX) );                // 5.000000
        llSay(0, "Range= " + (string) llListStatistics(LIST_STAT_RANGE, LX) );                    // 21.500000
        llSay(0, "Std.Dev= " + (string) llListStatistics(LIST_STAT_STD_DEV, LX) );                // 8.258468
        llSay(0, "Sum= " + (string) llListStatistics(LIST_STAT_SUM, LX) );                        // 15.697500
        llSay(0, "Sum of squares= " + (string) llListStatistics(LIST_STAT_SUM_SQUARES, LX) );      // 322.091500
 
    }
}
// Note that LSLEditor produces "NaN" (Not A Number) for the geometric mean above. Geometric mean applies only to numbers of the same sign.
</source>
 
<source lang="lsl2">// shows just how bad SL is behaving and demonstrates the use of llListStatistics()
list dil_s;
list dil_s;
list fps_s;
list fps_s;
integer ticks;
integer ticks = 0;


default
default
Line 75: Line 99:
         dil_s = llList2List(dil_s + llGetRegionTimeDilation(), -60, -1);
         dil_s = llList2List(dil_s + llGetRegionTimeDilation(), -60, -1);
         fps_s = llList2List(fps_s + llGetRegionFPS(), -60, -1);
         fps_s = llList2List(fps_s + llGetRegionFPS(), -60, -1);
         if(3 > ++ticks)
         if(3 <= ++ticks)
         {
         {
             llSetText(
             llSetText(
Line 98: Line 122:
         }
         }
     }
     }
}</lsl>
}</source>
|helpers
|helpers
|also_functions=
|also_functions=

Latest revision as of 06:41, 13 January 2016

Summary

Function: float llListStatistics( integer operation, list src );
0.0 Forced Delay
10.0 Energy

Returns a float that is the result of performing statistical aggregate function operation on src.

• integer operation a LIST_STAT_* flag
• list src

If a list entry type is not a float or an integer it is silently ignored.

Constant Description
LIST_STAT_RANGE 0 Calculates the range.
LIST_STAT_MIN 1 Calculates the smallest number.
LIST_STAT_MAX 2 Calculates the largest number.
LIST_STAT_MEAN 3 Calculates the mean (average).
LIST_STAT_MEDIAN 4 Calculates the median number.
LIST_STAT_STD_DEV 5 Calculates the standard deviation.
LIST_STAT_SUM 6 Calculates the sum.
LIST_STAT_SUM_SQUARES 7 Calculates the sum of the squares.
LIST_STAT_NUM_COUNT 8 Determines the number of float and integer elements.
LIST_STAT_GEOMETRIC_MEAN 9 Calculates the geometric mean.

Examples

// Show results for each operation for a sample list
default
{
    state_entry()
    {
        list LX = [-1, 3.33, 17, "object", -4.5, 0.8675 ];

        llSay(0, "G.Mean= " + (string) llListStatistics(LIST_STAT_GEOMETRIC_MEAN, LX) );           // 0. 000000
        llSay(0, "Max= " + (string) llListStatistics(LIST_STAT_MAX, LX) );                         // 17.000000
        llSay(0, "Min= " + (string) llListStatistics(LIST_STAT_MIN, LX) );                         // -4.500000
        llSay(0, "Mean= " + (string) llListStatistics(LIST_STAT_MEAN, LX) );                       // 3.139500
        llSay(0, "Median= " + (string) llListStatistics(LIST_STAT_MEDIAN, LX) );                   // 0.867500
        llSay(0, "Count= " + (string) llListStatistics(LIST_STAT_NUM_COUNT, LX) );                 // 5.000000
        llSay(0, "Range= " + (string) llListStatistics(LIST_STAT_RANGE, LX) );                     // 21.500000
        llSay(0, "Std.Dev= " + (string) llListStatistics(LIST_STAT_STD_DEV, LX) );                 // 8.258468
        llSay(0, "Sum= " + (string) llListStatistics(LIST_STAT_SUM, LX) );                         // 15.697500
        llSay(0, "Sum of squares= " + (string) llListStatistics(LIST_STAT_SUM_SQUARES, LX) );      // 322.091500

    }
}
// Note that LSLEditor produces "NaN" (Not A Number) for the geometric mean above. Geometric mean applies only to numbers of the same sign.
// shows just how bad SL is behaving and demonstrates the use of llListStatistics()
list dil_s;
list fps_s;
integer ticks = 0;

default
{
    state_entry()
    {
        llSetTimerEvent(1.0);
    }
    
    on_rez (integer parm)
    {
        llResetScript();
    }
    
    timer()
    {
        dil_s = llList2List(dil_s + llGetRegionTimeDilation(), -60, -1);
        fps_s = llList2List(fps_s + llGetRegionFPS(), -60, -1);
        if(3 <= ++ticks)
        {
            llSetText(
                "Dilation: min="+(string) llListStatistics(LIST_STAT_MIN, dil_s) + ", mean=" +
                    (string) llListStatistics(LIST_STAT_MEAN, dil_s) + ", max=" +
                    (string) llListStatistics(LIST_STAT_MAX, dil_s) + ", std.dev=" +
                    (string) llListStatistics(LIST_STAT_STD_DEV, dil_s) + "\n" + 
                    "FPS: min="+(string) llListStatistics(LIST_STAT_MIN, fps_s) + ", mean=" +
                    (string) llListStatistics(LIST_STAT_MEAN, fps_s) + ", max=" +
                    (string) llListStatistics(LIST_STAT_MAX, fps_s) + ", std.dev=" +
                    (string) llListStatistics(LIST_STAT_STD_DEV, fps_s),
                <1.0, 1.0, 0.0>, //yellow
                1.0);
        }
    }
    
    changed(integer change)
    {
        if(change & CHANGED_REGION)
        {
            llResetScript();
        }
    }
}

Notes

Given that this operation ignores any non-numbers in a list, it can be used to tell you, in a mixed list, how many of the elements in a list are numbers (when used with the LIST_STAT_NUM_COUNT parameter.)

See Also

Functions

•  llGetListEntryType

Deep Notes

Tests

•  llListStatistics Test

Signature

function float llListStatistics( integer operation, list src );