<div dir="ltr"><div>Hi Jimmie,</div><div>effectively I did not subsribe...</div><div>Having efficient methods for sliding window average is possible, here is how I would do it:</div><div><br></div><div>"Create a vector with 100,000 rows filles with random values (uniform distrubution in [0,1]"<br>v := LapackDGEMatrix randUniform: #(100000 1).<br><br>"extract values from rank 10001 to 20000"<br>w1 := v atIntervalFrom: 10001 to: 20000 by: 1.<br><br>"create a left multiplier matrix for performing average of w1"<br>a := LapackDGEMatrix nrow: 1 ncol: w1 nrow withAll: 1.0 / w1 size. <br><br>"get the average (this is a 1x1 matrix from which we take first element)"<br>avg1 := (a * w1) at: 1.<br><br>[ "select another slice of same size"<br>w2 := v atIntervalFrom: 15001 to: 25000 by: 1.<br><br>"get the average (we can recycle a)"<br>avg2 := (a * w2) at: 1 ] bench.<br></div><div><br></div><div>This gives:<br> '16,500 per second. 60.7 microseconds per run.'<br></div><div>versus:<br>[w2 sum / w2 size] bench.<br> '1,100 per second. 908 microseconds per run.'</div><div><br></div><div>For max and min, it's harder. Lapack/Blas only provide max of absolute value as primitive:<br>[w2 absMax] bench.<br> '19,400 per second. 51.5 microseconds per run.'</div><div><br></div><div>Everything else will be slower, unless we write new primitives in C and connect them...</div>[w2 maxOf: [:each | each]] bench.<br> '984 per second. 1.02 milliseconds per run.'<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Le dim. 19 mai 2019 à 14:58, Jimmie <<a href="mailto:jlhouchin@gmail.com">jlhouchin@gmail.com</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 5/16/19 1:26 PM, Nicolas Cellier wrote:> Any feedback on this?<br>
 > Did someone tried to use Smallapack in Pharo?<br>
 > Jimmie?<br>
 ><br>
<br>
I am going to guess that you are not on pharo-users. My bad.<br>
I posted this in pharo-users as I it wasn't Pharo development question.<br>
<br>
I probably should have posted here or emailed you directly.<br>
<br>
All I really need is good performance with a simple array of floats. No <br>
matrix math. Nothing complicated. Moving Averages over a slice of the <br>
array. A variety of different averages, weighted, etc. Max/min of the <br>
array. But just a single simple array.<br>
<br>
Any help greatly appreciated.<br>
<br>
Thanks.<br>
<br>
<br>
On 4/28/19 8:32 PM, Jimmie Houchin wrote:<br>
Hello,<br>
<br>
I have installed Smallapack into Pharo 7.0.3. Thanks Nicholas.<br>
<br>
I am very unsure on my use of Smallapack. I am not a mathematician or <br>
scientist. However the only part of Smallapack I am trying to use at the <br>
moment is something that would  be 64bit and compare to FloatArray so <br>
that I can do some simple accessing, slicing, sum, and average on the array.<br>
<br>
Here is some sample code I wrote just to play in a playground.<br>
<br>
I have an ExternalDoubleArray, LapackDGEMatrix, and a FloatArray <br>
samples. The ones not in use are commented out for any run.<br>
<br>
fp is a download from <br>
<a href="http://ratedata.gaincapital.com/2018/12%20December/EUR_USD_Week1.zip" rel="noreferrer" target="_blank">http://ratedata.gaincapital.com/2018/12%20December/EUR_USD_Week1.zip</a><br>
and unzipped to a directory.<br>
<br>
fp := '/home/jimmie/data/EUR_USD_Week1.csv'<br>
index := 0.<br>
pricesSum := 0.<br>
asum := 0.<br>
ttr := [<br>
     lines := fp asFileReference contents lines allButFirst.<br>
     a := ExternalDoubleArray new: lines size.<br>
     "la := LapackDGEMatrix allocateNrow: lines size ncol: 1.<br>
     a := la columnAt: 1."<br>
     "a := FloatArray new: lines size."<br>
     lines do: [ :line || parts price |<br>
         parts := ',' split: line.<br>
         index := index + 1.<br>
         price := Float readFrom: (parts last).<br>
         a at: index put: price.<br>
         pricesSum := pricesSum + price.<br>
         (index rem: 100) = 0 ifTrue: [<br>
             asum := a sum.<br>
      ]]] timeToRun.<br>
{ index. pricesSum. asum. ttr }.<br>
  "ExternalDoubleArray an Array(337588 383662.5627699992 <br>
383562.2956199993 0:00:01:59.885)"<br>
  "FloatArray  an Array(337588 383662.5627699992 383562.2954441309 <br>
0:00:00:06.555)"<br>
<br>
FloatArray is not the precision I need. But it is over 18x faster.<br>
<br>
I am afraid I must be doing something badly wrong. Python/Numpy is over <br>
4x faster than FloatArray for the above.<br>
<br>
If I am using Smallapack incorrectly please help.<br>
<br>
Any help greatly appreciated.<br>
<br>
Thanks.<br>
<br>
<br>
</blockquote></div>