<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*-<a name="line.1"></a>
<span class="sourceLineNo">002</span> *******************************************************************************<a name="line.2"></a>
<span class="sourceLineNo">003</span> * Copyright (c) 2011, 2016 Diamond Light Source Ltd.<a name="line.3"></a>
<span class="sourceLineNo">004</span> * All rights reserved. This program and the accompanying materials<a name="line.4"></a>
<span class="sourceLineNo">005</span> * are made available under the terms of the Eclipse Public License v1.0<a name="line.5"></a>
<span class="sourceLineNo">006</span> * which accompanies this distribution, and is available at<a name="line.6"></a>
<span class="sourceLineNo">007</span> * http://www.eclipse.org/legal/epl-v10.html<a name="line.7"></a>
<span class="sourceLineNo">008</span> *<a name="line.8"></a>
<span class="sourceLineNo">009</span> * Contributors:<a name="line.9"></a>
<span class="sourceLineNo">010</span> *    Peter Chang - initial API and implementation and/or initial documentation<a name="line.10"></a>
<span class="sourceLineNo">011</span> *******************************************************************************/<a name="line.11"></a>
<span class="sourceLineNo">012</span><a name="line.12"></a>
<span class="sourceLineNo">013</span>package org.eclipse.january.dataset;<a name="line.13"></a>
<span class="sourceLineNo">014</span><a name="line.14"></a>
<span class="sourceLineNo">015</span>import java.lang.ref.SoftReference;<a name="line.15"></a>
<span class="sourceLineNo">016</span>import java.util.ArrayList;<a name="line.16"></a>
<span class="sourceLineNo">017</span>import java.util.Collections;<a name="line.17"></a>
<span class="sourceLineNo">018</span>import java.util.HashMap;<a name="line.18"></a>
<span class="sourceLineNo">019</span>import java.util.List;<a name="line.19"></a>
<span class="sourceLineNo">020</span>import java.util.Map;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import java.util.TreeMap;<a name="line.21"></a>
<span class="sourceLineNo">022</span><a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.commons.math3.complex.Complex;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.commons.math3.stat.descriptive.moment.Kurtosis;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.commons.math3.stat.descriptive.moment.Skewness;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.eclipse.january.metadata.Dirtiable;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.eclipse.january.metadata.MetadataType;<a name="line.27"></a>
<span class="sourceLineNo">028</span><a name="line.28"></a>
<span class="sourceLineNo">029</span><a name="line.29"></a>
<span class="sourceLineNo">030</span>/**<a name="line.30"></a>
<span class="sourceLineNo">031</span> * Statistics class<a name="line.31"></a>
<span class="sourceLineNo">032</span> * <a name="line.32"></a>
<span class="sourceLineNo">033</span> * TODO Where is mode? http://en.wikipedia.org/wiki/Mode_(statistics)<a name="line.33"></a>
<span class="sourceLineNo">034</span> * <a name="line.34"></a>
<span class="sourceLineNo">035</span> */<a name="line.35"></a>
<span class="sourceLineNo">036</span>public class Stats {<a name="line.36"></a>
<span class="sourceLineNo">037</span><a name="line.37"></a>
<span class="sourceLineNo">038</span>        private static class ReferencedDataset extends SoftReference&lt;Dataset&gt; {<a name="line.38"></a>
<span class="sourceLineNo">039</span>                public ReferencedDataset(Dataset d) {<a name="line.39"></a>
<span class="sourceLineNo">040</span>                        super(d);<a name="line.40"></a>
<span class="sourceLineNo">041</span>                }<a name="line.41"></a>
<span class="sourceLineNo">042</span>        }<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
<span class="sourceLineNo">044</span>        private static class QStatisticsImpl&lt;T&gt; implements MetadataType {<a name="line.44"></a>
<span class="sourceLineNo">045</span>                private static final long serialVersionUID = -3296671666463190388L;<a name="line.45"></a>
<span class="sourceLineNo">046</span>                final static Double Q1 = 0.25;<a name="line.46"></a>
<span class="sourceLineNo">047</span>                final static Double Q2 = 0.5;<a name="line.47"></a>
<span class="sourceLineNo">048</span>                final static Double Q3 = 0.75;<a name="line.48"></a>
<span class="sourceLineNo">049</span>                Map&lt;Double, T&gt; qmap = new HashMap&lt;Double, T&gt;();<a name="line.49"></a>
<span class="sourceLineNo">050</span>                transient Map&lt;Integer, Map&lt;Double, ReferencedDataset&gt;&gt; aqmap = new HashMap&lt;Integer, Map&lt;Double, ReferencedDataset&gt;&gt;();<a name="line.50"></a>
<span class="sourceLineNo">051</span>                transient ReferencedDataset s; // store 0th element<a name="line.51"></a>
<span class="sourceLineNo">052</span>                transient Map&lt;Integer, ReferencedDataset&gt; smap = new HashMap&lt;&gt;();<a name="line.52"></a>
<span class="sourceLineNo">053</span><a name="line.53"></a>
<span class="sourceLineNo">054</span>                @Dirtiable<a name="line.54"></a>
<span class="sourceLineNo">055</span>                private boolean isDirty = true;<a name="line.55"></a>
<span class="sourceLineNo">056</span><a name="line.56"></a>
<span class="sourceLineNo">057</span>                @Override<a name="line.57"></a>
<span class="sourceLineNo">058</span>                public QStatisticsImpl&lt;T&gt; clone() {<a name="line.58"></a>
<span class="sourceLineNo">059</span>                        return new QStatisticsImpl&lt;T&gt;(this);<a name="line.59"></a>
<span class="sourceLineNo">060</span>                }<a name="line.60"></a>
<span class="sourceLineNo">061</span><a name="line.61"></a>
<span class="sourceLineNo">062</span>                public QStatisticsImpl() {<a name="line.62"></a>
<span class="sourceLineNo">063</span>                }<a name="line.63"></a>
<span class="sourceLineNo">064</span><a name="line.64"></a>
<span class="sourceLineNo">065</span>                private QStatisticsImpl(QStatisticsImpl&lt;T&gt; qstats) {<a name="line.65"></a>
<span class="sourceLineNo">066</span>                        if (qstats.s != null &amp;&amp; qstats.s.get() != null) {<a name="line.66"></a>
<span class="sourceLineNo">067</span>                                s = new ReferencedDataset(qstats.s.get().getView(false));<a name="line.67"></a>
<span class="sourceLineNo">068</span>                        }<a name="line.68"></a>
<span class="sourceLineNo">069</span>                        qmap.putAll(qstats.qmap);<a name="line.69"></a>
<span class="sourceLineNo">070</span>                        for (Integer i : qstats.aqmap.keySet()) {<a name="line.70"></a>
<span class="sourceLineNo">071</span>                                aqmap.put(i, new HashMap&lt;&gt;(qstats.aqmap.get(i)));<a name="line.71"></a>
<span class="sourceLineNo">072</span>                        }<a name="line.72"></a>
<span class="sourceLineNo">073</span>                        smap.putAll(qstats.smap);<a name="line.73"></a>
<span class="sourceLineNo">074</span>                        isDirty = qstats.isDirty;<a name="line.74"></a>
<span class="sourceLineNo">075</span>                }<a name="line.75"></a>
<span class="sourceLineNo">076</span><a name="line.76"></a>
<span class="sourceLineNo">077</span>                public void setQuantile(double q, T v) {<a name="line.77"></a>
<span class="sourceLineNo">078</span>                        qmap.put(q, v);<a name="line.78"></a>
<span class="sourceLineNo">079</span>                }<a name="line.79"></a>
<span class="sourceLineNo">080</span><a name="line.80"></a>
<span class="sourceLineNo">081</span>                public T getQuantile(double q) {<a name="line.81"></a>
<span class="sourceLineNo">082</span>                        return qmap.get(q);<a name="line.82"></a>
<span class="sourceLineNo">083</span>                }<a name="line.83"></a>
<span class="sourceLineNo">084</span><a name="line.84"></a>
<span class="sourceLineNo">085</span>                private Map&lt;Double, ReferencedDataset&gt; getMap(int axis) {<a name="line.85"></a>
<span class="sourceLineNo">086</span>                        Map&lt;Double, ReferencedDataset&gt; qm = aqmap.get(axis);<a name="line.86"></a>
<span class="sourceLineNo">087</span>                        if (qm == null) {<a name="line.87"></a>
<span class="sourceLineNo">088</span>                                qm = new HashMap&lt;&gt;();<a name="line.88"></a>
<span class="sourceLineNo">089</span>                                aqmap.put(axis, qm);<a name="line.89"></a>
<span class="sourceLineNo">090</span>                        }<a name="line.90"></a>
<span class="sourceLineNo">091</span>                        return qm;<a name="line.91"></a>
<span class="sourceLineNo">092</span>                }<a name="line.92"></a>
<span class="sourceLineNo">093</span><a name="line.93"></a>
<span class="sourceLineNo">094</span>                public void setQuantile(int axis, double q, Dataset v) {<a name="line.94"></a>
<span class="sourceLineNo">095</span>                        Map&lt;Double, ReferencedDataset&gt; qm = getMap(axis);<a name="line.95"></a>
<span class="sourceLineNo">096</span>                        qm.put(q, new ReferencedDataset(v));<a name="line.96"></a>
<span class="sourceLineNo">097</span>                }<a name="line.97"></a>
<span class="sourceLineNo">098</span><a name="line.98"></a>
<span class="sourceLineNo">099</span>                public Dataset getQuantile(int axis, double q) {<a name="line.99"></a>
<span class="sourceLineNo">100</span>                        Map&lt;Double, ReferencedDataset&gt; qm = getMap(axis);<a name="line.100"></a>
<span class="sourceLineNo">101</span>                        ReferencedDataset rd = qm.get(q);<a name="line.101"></a>
<span class="sourceLineNo">102</span>                        return rd == null ? null : rd.get();<a name="line.102"></a>
<span class="sourceLineNo">103</span>                }<a name="line.103"></a>
<span class="sourceLineNo">104</span><a name="line.104"></a>
<span class="sourceLineNo">105</span>                Dataset getSortedDataset(int axis) {<a name="line.105"></a>
<span class="sourceLineNo">106</span>                        return smap.containsKey(axis) ? smap.get(axis).get() : null;<a name="line.106"></a>
<span class="sourceLineNo">107</span>                }<a name="line.107"></a>
<span class="sourceLineNo">108</span><a name="line.108"></a>
<span class="sourceLineNo">109</span>                void setSortedDataset(int axis, Dataset v) {<a name="line.109"></a>
<span class="sourceLineNo">110</span>                        smap.put(axis, new ReferencedDataset(v));<a name="line.110"></a>
<span class="sourceLineNo">111</span>                }<a name="line.111"></a>
<span class="sourceLineNo">112</span>        }<a name="line.112"></a>
<span class="sourceLineNo">113</span><a name="line.113"></a>
<span class="sourceLineNo">114</span>        // calculates statistics and returns sorted dataset (0th element if compound)<a name="line.114"></a>
<span class="sourceLineNo">115</span>        private static QStatisticsImpl&lt;?&gt; calcQuartileStats(final Dataset a) {<a name="line.115"></a>
<span class="sourceLineNo">116</span>                Dataset s = null;<a name="line.116"></a>
<span class="sourceLineNo">117</span>                final int is = a.getElementsPerItem();<a name="line.117"></a>
<span class="sourceLineNo">118</span><a name="line.118"></a>
<span class="sourceLineNo">119</span>                if (is == 1) {<a name="line.119"></a>
<span class="sourceLineNo">120</span>                        s = DatasetUtils.sort(a);<a name="line.120"></a>
<span class="sourceLineNo">121</span><a name="line.121"></a>
<span class="sourceLineNo">122</span>                        QStatisticsImpl&lt;Double&gt; qstats = new QStatisticsImpl&lt;Double&gt;();<a name="line.122"></a>
<span class="sourceLineNo">123</span><a name="line.123"></a>
<span class="sourceLineNo">124</span>                        qstats.setQuantile(QStatisticsImpl.Q1, pQuantile(s, QStatisticsImpl.Q1));<a name="line.124"></a>
<span class="sourceLineNo">125</span>                        qstats.setQuantile(QStatisticsImpl.Q2, pQuantile(s, QStatisticsImpl.Q2));<a name="line.125"></a>
<span class="sourceLineNo">126</span>                        qstats.setQuantile(QStatisticsImpl.Q3, pQuantile(s, QStatisticsImpl.Q3));<a name="line.126"></a>
<span class="sourceLineNo">127</span>                        qstats.s = new ReferencedDataset(s);<a name="line.127"></a>
<span class="sourceLineNo">128</span>                        return qstats;<a name="line.128"></a>
<span class="sourceLineNo">129</span>                }<a name="line.129"></a>
<span class="sourceLineNo">130</span><a name="line.130"></a>
<span class="sourceLineNo">131</span>                QStatisticsImpl&lt;double[]&gt; qstats = new QStatisticsImpl&lt;double[]&gt;();<a name="line.131"></a>
<span class="sourceLineNo">132</span><a name="line.132"></a>
<span class="sourceLineNo">133</span>                Dataset w = DatasetFactory.zeros(1, a.getClass(), a.getShapeRef());<a name="line.133"></a>
<span class="sourceLineNo">134</span>                double[] q1 = new double[is];<a name="line.134"></a>
<span class="sourceLineNo">135</span>                double[] q2 = new double[is];<a name="line.135"></a>
<span class="sourceLineNo">136</span>                double[] q3 = new double[is];<a name="line.136"></a>
<span class="sourceLineNo">137</span>                qstats.setQuantile(QStatisticsImpl.Q1, q1);<a name="line.137"></a>
<span class="sourceLineNo">138</span>                qstats.setQuantile(QStatisticsImpl.Q2, q2);<a name="line.138"></a>
<span class="sourceLineNo">139</span>                qstats.setQuantile(QStatisticsImpl.Q3, q3);<a name="line.139"></a>
<span class="sourceLineNo">140</span>                for (int j = 0; j &lt; is; j++) {<a name="line.140"></a>
<span class="sourceLineNo">141</span>                        ((CompoundDataset) a).copyElements(w, j);<a name="line.141"></a>
<span class="sourceLineNo">142</span>                        w.sort(null);<a name="line.142"></a>
<span class="sourceLineNo">143</span><a name="line.143"></a>
<span class="sourceLineNo">144</span>                        q1[j] = pQuantile(w, QStatisticsImpl.Q1);<a name="line.144"></a>
<span class="sourceLineNo">145</span>                        q2[j] = pQuantile(w, QStatisticsImpl.Q2);<a name="line.145"></a>
<span class="sourceLineNo">146</span>                        q3[j] = pQuantile(w, QStatisticsImpl.Q3);<a name="line.146"></a>
<span class="sourceLineNo">147</span>                        if (j == 0)<a name="line.147"></a>
<span class="sourceLineNo">148</span>                                s = w.clone();<a name="line.148"></a>
<span class="sourceLineNo">149</span>                }<a name="line.149"></a>
<span class="sourceLineNo">150</span>                qstats.s = new ReferencedDataset(s);<a name="line.150"></a>
<span class="sourceLineNo">151</span><a name="line.151"></a>
<span class="sourceLineNo">152</span>                return qstats;<a name="line.152"></a>
<span class="sourceLineNo">153</span>        }<a name="line.153"></a>
<span class="sourceLineNo">154</span><a name="line.154"></a>
<span class="sourceLineNo">155</span>        static private QStatisticsImpl&lt;?&gt; getQStatistics(final Dataset a) {<a name="line.155"></a>
<span class="sourceLineNo">156</span>                QStatisticsImpl&lt;?&gt; m = a.getFirstMetadata(QStatisticsImpl.class);<a name="line.156"></a>
<span class="sourceLineNo">157</span>                if (m == null || m.isDirty) {<a name="line.157"></a>
<span class="sourceLineNo">158</span>                        m = calcQuartileStats(a);<a name="line.158"></a>
<span class="sourceLineNo">159</span>                        a.setMetadata(m);<a name="line.159"></a>
<span class="sourceLineNo">160</span>                }<a name="line.160"></a>
<span class="sourceLineNo">161</span>                return m;<a name="line.161"></a>
<span class="sourceLineNo">162</span>        }<a name="line.162"></a>
<span class="sourceLineNo">163</span><a name="line.163"></a>
<span class="sourceLineNo">164</span>        static private QStatisticsImpl&lt;?&gt; getQStatistics(final Dataset a, final int axis) {<a name="line.164"></a>
<span class="sourceLineNo">165</span>                final int is = a.getElementsPerItem();<a name="line.165"></a>
<span class="sourceLineNo">166</span>                QStatisticsImpl&lt;?&gt; qstats = a.getFirstMetadata(QStatisticsImpl.class);<a name="line.166"></a>
<span class="sourceLineNo">167</span><a name="line.167"></a>
<span class="sourceLineNo">168</span>                if (qstats == null || qstats.isDirty) {<a name="line.168"></a>
<span class="sourceLineNo">169</span>                        if (is == 1) {<a name="line.169"></a>
<span class="sourceLineNo">170</span>                                qstats = new QStatisticsImpl&lt;Double&gt;();<a name="line.170"></a>
<span class="sourceLineNo">171</span>                        } else {<a name="line.171"></a>
<span class="sourceLineNo">172</span>                                qstats = new QStatisticsImpl&lt;double[]&gt;();<a name="line.172"></a>
<span class="sourceLineNo">173</span>                        }<a name="line.173"></a>
<span class="sourceLineNo">174</span>                        a.setMetadata(qstats);<a name="line.174"></a>
<span class="sourceLineNo">175</span>                }<a name="line.175"></a>
<span class="sourceLineNo">176</span><a name="line.176"></a>
<span class="sourceLineNo">177</span>                if (qstats.getQuantile(axis, QStatisticsImpl.Q2) == null) {<a name="line.177"></a>
<span class="sourceLineNo">178</span>                        if (is == 1) {<a name="line.178"></a>
<span class="sourceLineNo">179</span>                                Dataset s = DatasetUtils.sort(a, axis);<a name="line.179"></a>
<span class="sourceLineNo">180</span><a name="line.180"></a>
<span class="sourceLineNo">181</span>                                qstats.setQuantile(axis, QStatisticsImpl.Q1, pQuantile(s, axis, QStatisticsImpl.Q1));<a name="line.181"></a>
<span class="sourceLineNo">182</span>                                qstats.setQuantile(axis, QStatisticsImpl.Q2, pQuantile(s, axis, QStatisticsImpl.Q2));<a name="line.182"></a>
<span class="sourceLineNo">183</span>                                qstats.setQuantile(axis, QStatisticsImpl.Q3, pQuantile(s, axis, QStatisticsImpl.Q3));<a name="line.183"></a>
<span class="sourceLineNo">184</span>                                qstats.setSortedDataset(axis, s);<a name="line.184"></a>
<span class="sourceLineNo">185</span>                        } else {<a name="line.185"></a>
<span class="sourceLineNo">186</span>                                Dataset w = DatasetFactory.zeros(1, a.getClass(), a.getShapeRef());<a name="line.186"></a>
<span class="sourceLineNo">187</span>                                CompoundDoubleDataset q1 = null, q2 = null, q3 = null;<a name="line.187"></a>
<span class="sourceLineNo">188</span>                                for (int j = 0; j &lt; is; j++) {<a name="line.188"></a>
<span class="sourceLineNo">189</span>                                        ((CompoundDataset) a).copyElements(w, j);<a name="line.189"></a>
<span class="sourceLineNo">190</span>                                        w.sort(axis);<a name="line.190"></a>
<span class="sourceLineNo">191</span>        <a name="line.191"></a>
<span class="sourceLineNo">192</span>                                        final Dataset c = pQuantile(w, axis, QStatisticsImpl.Q1);<a name="line.192"></a>
<span class="sourceLineNo">193</span>                                        if (j == 0) {<a name="line.193"></a>
<span class="sourceLineNo">194</span>                                                q1 = DatasetFactory.zeros(is, CompoundDoubleDataset.class, c.getShapeRef());<a name="line.194"></a>
<span class="sourceLineNo">195</span>                                                q2 = DatasetFactory.zeros(is, CompoundDoubleDataset.class, c.getShapeRef());<a name="line.195"></a>
<span class="sourceLineNo">196</span>                                                q3 = DatasetFactory.zeros(is, CompoundDoubleDataset.class, c.getShapeRef());<a name="line.196"></a>
<span class="sourceLineNo">197</span>                                        }<a name="line.197"></a>
<span class="sourceLineNo">198</span>                                        q1.setElements(c, j);<a name="line.198"></a>
<span class="sourceLineNo">199</span>        <a name="line.199"></a>
<span class="sourceLineNo">200</span>                                        q2.setElements(pQuantile(w, axis, QStatisticsImpl.Q2), j);<a name="line.200"></a>
<span class="sourceLineNo">201</span>        <a name="line.201"></a>
<span class="sourceLineNo">202</span>                                        q3.setElements(pQuantile(w, axis, QStatisticsImpl.Q3), j);<a name="line.202"></a>
<span class="sourceLineNo">203</span>                                }<a name="line.203"></a>
<span class="sourceLineNo">204</span>                                qstats.setQuantile(axis, QStatisticsImpl.Q1, q1);<a name="line.204"></a>
<span class="sourceLineNo">205</span>                                qstats.setQuantile(axis, QStatisticsImpl.Q2, q2);<a name="line.205"></a>
<span class="sourceLineNo">206</span>                                qstats.setQuantile(axis, QStatisticsImpl.Q3, q3);<a name="line.206"></a>
<span class="sourceLineNo">207</span>                        }<a name="line.207"></a>
<span class="sourceLineNo">208</span>                }<a name="line.208"></a>
<span class="sourceLineNo">209</span><a name="line.209"></a>
<span class="sourceLineNo">210</span>                return qstats;<a name="line.210"></a>
<span class="sourceLineNo">211</span>        }<a name="line.211"></a>
<span class="sourceLineNo">212</span><a name="line.212"></a>
<span class="sourceLineNo">213</span>        // process a sorted dataset<a name="line.213"></a>
<span class="sourceLineNo">214</span>        private static double pQuantile(final Dataset s, final double q) {<a name="line.214"></a>
<span class="sourceLineNo">215</span>                double f = (s.getSize() - 1) * q; // fraction of sample number<a name="line.215"></a>
<span class="sourceLineNo">216</span>                if (f &lt; 0)<a name="line.216"></a>
<span class="sourceLineNo">217</span>                        return Double.NaN;<a name="line.217"></a>
<span class="sourceLineNo">218</span>                int qpt = (int) Math.floor(f); // quantile point<a name="line.218"></a>
<span class="sourceLineNo">219</span>                f -= qpt;<a name="line.219"></a>
<span class="sourceLineNo">220</span><a name="line.220"></a>
<span class="sourceLineNo">221</span>                double quantile = s.getElementDoubleAbs(qpt);<a name="line.221"></a>
<span class="sourceLineNo">222</span>                if (f &gt; 0) {<a name="line.222"></a>
<span class="sourceLineNo">223</span>                        quantile = (1-f)*quantile + f*s.getElementDoubleAbs(qpt+1);<a name="line.223"></a>
<span class="sourceLineNo">224</span>                }<a name="line.224"></a>
<span class="sourceLineNo">225</span>                return quantile;<a name="line.225"></a>
<span class="sourceLineNo">226</span>        }<a name="line.226"></a>
<span class="sourceLineNo">227</span><a name="line.227"></a>
<span class="sourceLineNo">228</span>        // process a sorted dataset and returns a double or compound double dataset<a name="line.228"></a>
<span class="sourceLineNo">229</span>        private static Dataset pQuantile(final Dataset s, final int axis, final double q) {<a name="line.229"></a>
<span class="sourceLineNo">230</span>                final int rank = s.getRank();<a name="line.230"></a>
<span class="sourceLineNo">231</span>                final int is = s.getElementsPerItem();<a name="line.231"></a>
<span class="sourceLineNo">232</span><a name="line.232"></a>
<span class="sourceLineNo">233</span>                int[] oshape = s.getShape();<a name="line.233"></a>
<span class="sourceLineNo">234</span><a name="line.234"></a>
<span class="sourceLineNo">235</span>                double f = (oshape[axis] - 1) * q; // fraction of sample number<a name="line.235"></a>
<span class="sourceLineNo">236</span>                int qpt = (int) Math.floor(f); // quantile point<a name="line.236"></a>
<span class="sourceLineNo">237</span>                f -= qpt;<a name="line.237"></a>
<span class="sourceLineNo">238</span><a name="line.238"></a>
<span class="sourceLineNo">239</span>                oshape[axis] = 1;<a name="line.239"></a>
<span class="sourceLineNo">240</span>                int[] qshape = ShapeUtils.squeezeShape(oshape, false);<a name="line.240"></a>
<span class="sourceLineNo">241</span>                Dataset qds = DatasetFactory.zeros(is, CompoundDoubleDataset.class, qshape);<a name="line.241"></a>
<span class="sourceLineNo">242</span><a name="line.242"></a>
<span class="sourceLineNo">243</span>                IndexIterator qiter = qds.getIterator(true);<a name="line.243"></a>
<span class="sourceLineNo">244</span>                int[] qpos = qiter.getPos();<a name="line.244"></a>
<span class="sourceLineNo">245</span>                int[] spos = oshape;<a name="line.245"></a>
<span class="sourceLineNo">246</span><a name="line.246"></a>
<span class="sourceLineNo">247</span>                while (qiter.hasNext()) {<a name="line.247"></a>
<span class="sourceLineNo">248</span>                        int i = 0;<a name="line.248"></a>
<span class="sourceLineNo">249</span>                        for (; i &lt; axis; i++) {<a name="line.249"></a>
<span class="sourceLineNo">250</span>                                spos[i] = qpos[i];<a name="line.250"></a>
<span class="sourceLineNo">251</span>                        }<a name="line.251"></a>
<span class="sourceLineNo">252</span>                        spos[i++] = qpt;<a name="line.252"></a>
<span class="sourceLineNo">253</span>                        for (; i &lt; rank; i++) {<a name="line.253"></a>
<span class="sourceLineNo">254</span>                                spos[i] = qpos[i-1];<a name="line.254"></a>
<span class="sourceLineNo">255</span>                        }<a name="line.255"></a>
<span class="sourceLineNo">256</span><a name="line.256"></a>
<span class="sourceLineNo">257</span>                        Object obj = s.getObject(spos);<a name="line.257"></a>
<span class="sourceLineNo">258</span>                        qds.set(obj, qpos);<a name="line.258"></a>
<span class="sourceLineNo">259</span>                }<a name="line.259"></a>
<span class="sourceLineNo">260</span><a name="line.260"></a>
<span class="sourceLineNo">261</span>                if (f &gt; 0) {<a name="line.261"></a>
<span class="sourceLineNo">262</span>                        qiter = qds.getIterator(true);<a name="line.262"></a>
<span class="sourceLineNo">263</span>                        qpos = qiter.getPos();<a name="line.263"></a>
<span class="sourceLineNo">264</span>                        qpt++;<a name="line.264"></a>
<span class="sourceLineNo">265</span>                        Dataset rds = DatasetFactory.zeros(is, CompoundDoubleDataset.class, qshape);<a name="line.265"></a>
<span class="sourceLineNo">266</span>                        <a name="line.266"></a>
<span class="sourceLineNo">267</span>                        while (qiter.hasNext()) {<a name="line.267"></a>
<span class="sourceLineNo">268</span>                                int i = 0;<a name="line.268"></a>
<span class="sourceLineNo">269</span>                                for (; i &lt; axis; i++) {<a name="line.269"></a>
<span class="sourceLineNo">270</span>                                        spos[i] = qpos[i];<a name="line.270"></a>
<span class="sourceLineNo">271</span>                                }<a name="line.271"></a>
<span class="sourceLineNo">272</span>                                spos[i++] = qpt;<a name="line.272"></a>
<span class="sourceLineNo">273</span>                                for (; i &lt; rank; i++) {<a name="line.273"></a>
<span class="sourceLineNo">274</span>                                        spos[i] = qpos[i-1];<a name="line.274"></a>
<span class="sourceLineNo">275</span>                                }<a name="line.275"></a>
<span class="sourceLineNo">276</span><a name="line.276"></a>
<span class="sourceLineNo">277</span>                                Object obj = s.getObject(spos);<a name="line.277"></a>
<span class="sourceLineNo">278</span>                                rds.set(obj, qpos);<a name="line.278"></a>
<span class="sourceLineNo">279</span>                        }<a name="line.279"></a>
<span class="sourceLineNo">280</span>                        rds.imultiply(f);<a name="line.280"></a>
<span class="sourceLineNo">281</span>                        qds.imultiply(1-f);<a name="line.281"></a>
<span class="sourceLineNo">282</span>                        qds.iadd(rds);<a name="line.282"></a>
<span class="sourceLineNo">283</span>                }<a name="line.283"></a>
<span class="sourceLineNo">284</span><a name="line.284"></a>
<span class="sourceLineNo">285</span>                return qds;<a name="line.285"></a>
<span class="sourceLineNo">286</span>        }<a name="line.286"></a>
<span class="sourceLineNo">287</span><a name="line.287"></a>
<span class="sourceLineNo">288</span>        /**<a name="line.288"></a>
<span class="sourceLineNo">289</span>         * Calculate quantile of dataset which is defined as the inverse of the cumulative distribution function (CDF)<a name="line.289"></a>
<span class="sourceLineNo">290</span>         * @param a<a name="line.290"></a>
<span class="sourceLineNo">291</span>         * @param q<a name="line.291"></a>
<span class="sourceLineNo">292</span>         * @return point at which CDF has value q<a name="line.292"></a>
<span class="sourceLineNo">293</span>         */<a name="line.293"></a>
<span class="sourceLineNo">294</span>        @SuppressWarnings("unchecked")<a name="line.294"></a>
<span class="sourceLineNo">295</span>        public static double quantile(final Dataset a, final double q) {<a name="line.295"></a>
<span class="sourceLineNo">296</span>                if (q &lt; 0 || q &gt; 1) {<a name="line.296"></a>
<span class="sourceLineNo">297</span>                        throw new IllegalArgumentException("Quantile requested is outside [0,1]");<a name="line.297"></a>
<span class="sourceLineNo">298</span>                }<a name="line.298"></a>
<span class="sourceLineNo">299</span>                QStatisticsImpl&lt;Double&gt; qs = (QStatisticsImpl&lt;Double&gt;) getQStatistics(a);<a name="line.299"></a>
<span class="sourceLineNo">300</span>                Double qv = qs.getQuantile(q);<a name="line.300"></a>
<span class="sourceLineNo">301</span>                if (qv == null) {<a name="line.301"></a>
<span class="sourceLineNo">302</span>                        qv = pQuantile(qs.s.get(), q);<a name="line.302"></a>
<span class="sourceLineNo">303</span>                        qs.setQuantile(q, qv);<a name="line.303"></a>
<span class="sourceLineNo">304</span>                }<a name="line.304"></a>
<span class="sourceLineNo">305</span>                return qv;<a name="line.305"></a>
<span class="sourceLineNo">306</span>        }<a name="line.306"></a>
<span class="sourceLineNo">307</span><a name="line.307"></a>
<span class="sourceLineNo">308</span>        /**<a name="line.308"></a>
<span class="sourceLineNo">309</span>         * Calculate quantiles of dataset which is defined as the inverse of the cumulative distribution function (CDF)<a name="line.309"></a>
<span class="sourceLineNo">310</span>         * @param a<a name="line.310"></a>
<span class="sourceLineNo">311</span>         * @param values<a name="line.311"></a>
<span class="sourceLineNo">312</span>         * @return points at which CDF has given values<a name="line.312"></a>
<span class="sourceLineNo">313</span>         */<a name="line.313"></a>
<span class="sourceLineNo">314</span>        @SuppressWarnings("unchecked")<a name="line.314"></a>
<span class="sourceLineNo">315</span>        public static double[] quantile(final Dataset a, final double... values) {<a name="line.315"></a>
<span class="sourceLineNo">316</span>                final double[] points  = new double[values.length];<a name="line.316"></a>
<span class="sourceLineNo">317</span>                QStatisticsImpl&lt;Double&gt; qs = (QStatisticsImpl&lt;Double&gt;) getQStatistics(a);<a name="line.317"></a>
<span class="sourceLineNo">318</span>                for (int i = 0; i &lt; points.length; i++) {<a name="line.318"></a>
<span class="sourceLineNo">319</span>                        final double q = values[i];<a name="line.319"></a>
<span class="sourceLineNo">320</span>                        if (q &lt; 0 || q &gt; 1) {<a name="line.320"></a>
<span class="sourceLineNo">321</span>                                throw new IllegalArgumentException("Quantile requested is outside [0,1]");<a name="line.321"></a>
<span class="sourceLineNo">322</span>                        }<a name="line.322"></a>
<span class="sourceLineNo">323</span>                        Double qv = qs.getQuantile(q);<a name="line.323"></a>
<span class="sourceLineNo">324</span>                        if (qv == null) {<a name="line.324"></a>
<span class="sourceLineNo">325</span>                                qv = pQuantile(qs.s.get(), q);<a name="line.325"></a>
<span class="sourceLineNo">326</span>                                qs.setQuantile(q, qv);<a name="line.326"></a>
<span class="sourceLineNo">327</span>                        }<a name="line.327"></a>
<span class="sourceLineNo">328</span>                        points[i] = qv;<a name="line.328"></a>
<span class="sourceLineNo">329</span>                }<a name="line.329"></a>
<span class="sourceLineNo">330</span><a name="line.330"></a>
<span class="sourceLineNo">331</span>                return points;<a name="line.331"></a>
<span class="sourceLineNo">332</span>        }<a name="line.332"></a>
<span class="sourceLineNo">333</span><a name="line.333"></a>
<span class="sourceLineNo">334</span>        /**<a name="line.334"></a>
<span class="sourceLineNo">335</span>         * Calculate quantiles of dataset which is defined as the inverse of the cumulative distribution function (CDF)<a name="line.335"></a>
<span class="sourceLineNo">336</span>         * @param a<a name="line.336"></a>
<span class="sourceLineNo">337</span>         * @param axis<a name="line.337"></a>
<span class="sourceLineNo">338</span>         * @param values<a name="line.338"></a>
<span class="sourceLineNo">339</span>         * @return points at which CDF has given values<a name="line.339"></a>
<span class="sourceLineNo">340</span>         */<a name="line.340"></a>
<span class="sourceLineNo">341</span>        @SuppressWarnings({ "unchecked" })<a name="line.341"></a>
<span class="sourceLineNo">342</span>        public static Dataset[] quantile(final Dataset a, int axis, final double... values) {<a name="line.342"></a>
<span class="sourceLineNo">343</span>                final Dataset[] points  = new Dataset[values.length];<a name="line.343"></a>
<span class="sourceLineNo">344</span>                final int is = a.getElementsPerItem();<a name="line.344"></a>
<span class="sourceLineNo">345</span>                axis = a.checkAxis(axis);<a name="line.345"></a>
<span class="sourceLineNo">346</span><a name="line.346"></a>
<span class="sourceLineNo">347</span>                if (is == 1) {<a name="line.347"></a>
<span class="sourceLineNo">348</span>                        QStatisticsImpl&lt;Double&gt; qs = (QStatisticsImpl&lt;Double&gt;) getQStatistics(a, axis);<a name="line.348"></a>
<span class="sourceLineNo">349</span>                        for (int i = 0; i &lt; points.length; i++) {<a name="line.349"></a>
<span class="sourceLineNo">350</span>                                final double q = values[i];<a name="line.350"></a>
<span class="sourceLineNo">351</span>                                if (q &lt; 0 || q &gt; 1) {<a name="line.351"></a>
<span class="sourceLineNo">352</span>                                        throw new IllegalArgumentException("Quantile requested is outside [0,1]");<a name="line.352"></a>
<span class="sourceLineNo">353</span>                                }<a name="line.353"></a>
<span class="sourceLineNo">354</span>                                Dataset qv = qs.getQuantile(axis, q);<a name="line.354"></a>
<span class="sourceLineNo">355</span>                                if (qv == null) {<a name="line.355"></a>
<span class="sourceLineNo">356</span>                                        qv = pQuantile(qs.getSortedDataset(axis), axis, q);<a name="line.356"></a>
<span class="sourceLineNo">357</span>                                        qs.setQuantile(axis, q, qv);<a name="line.357"></a>
<span class="sourceLineNo">358</span>                                }<a name="line.358"></a>
<span class="sourceLineNo">359</span>                                points[i] = qv;<a name="line.359"></a>
<span class="sourceLineNo">360</span>                        }<a name="line.360"></a>
<span class="sourceLineNo">361</span>                } else {<a name="line.361"></a>
<span class="sourceLineNo">362</span>                        QStatisticsImpl&lt;double[]&gt; qs = (QStatisticsImpl&lt;double[]&gt;) getQStatistics(a);<a name="line.362"></a>
<span class="sourceLineNo">363</span>                        Dataset w = DatasetFactory.zeros(1, a.getClass(), a.getShapeRef());<a name="line.363"></a>
<span class="sourceLineNo">364</span>                        for (int j = 0; j &lt; is; j++) {<a name="line.364"></a>
<span class="sourceLineNo">365</span>                                boolean copied = false;<a name="line.365"></a>
<span class="sourceLineNo">366</span><a name="line.366"></a>
<span class="sourceLineNo">367</span>                                for (int i = 0; i &lt; points.length; i++) {<a name="line.367"></a>
<span class="sourceLineNo">368</span>                                        final double q = values[i];<a name="line.368"></a>
<span class="sourceLineNo">369</span>                                        if (q &lt; 0 || q &gt; 1) {<a name="line.369"></a>
<span class="sourceLineNo">370</span>                                                throw new IllegalArgumentException("Quantile requested is outside [0,1]");<a name="line.370"></a>
<span class="sourceLineNo">371</span>                                        }<a name="line.371"></a>
<span class="sourceLineNo">372</span>                                        Dataset qv = qs.getQuantile(axis, q);<a name="line.372"></a>
<span class="sourceLineNo">373</span>                                        if (qv == null) {<a name="line.373"></a>
<span class="sourceLineNo">374</span>                                                if (!copied) {<a name="line.374"></a>
<span class="sourceLineNo">375</span>                                                        copied = true;<a name="line.375"></a>
<span class="sourceLineNo">376</span>                                                        ((CompoundDataset) a).copyElements(w, j);<a name="line.376"></a>
<span class="sourceLineNo">377</span>                                                        w.sort(axis);<a name="line.377"></a>
<span class="sourceLineNo">378</span>                                                }<a name="line.378"></a>
<span class="sourceLineNo">379</span>                                                qv = pQuantile(w, axis, q);<a name="line.379"></a>
<span class="sourceLineNo">380</span>                                                qs.setQuantile(axis, q, qv);<a name="line.380"></a>
<span class="sourceLineNo">381</span>                                                if (j == 0) {<a name="line.381"></a>
<span class="sourceLineNo">382</span>                                                        points[i] = DatasetFactory.zeros(is, qv.getClass(), qv.getShapeRef());<a name="line.382"></a>
<span class="sourceLineNo">383</span>                                                }<a name="line.383"></a>
<span class="sourceLineNo">384</span>                                                ((CompoundDoubleDataset) points[i]).setElements(qv, j);<a name="line.384"></a>
<span class="sourceLineNo">385</span>                                        }<a name="line.385"></a>
<span class="sourceLineNo">386</span>                                }<a name="line.386"></a>
<span class="sourceLineNo">387</span>                        }<a name="line.387"></a>
<span class="sourceLineNo">388</span>                }<a name="line.388"></a>
<span class="sourceLineNo">389</span><a name="line.389"></a>
<span class="sourceLineNo">390</span>                return points;<a name="line.390"></a>
<span class="sourceLineNo">391</span>        }<a name="line.391"></a>
<span class="sourceLineNo">392</span><a name="line.392"></a>
<span class="sourceLineNo">393</span>        /**<a name="line.393"></a>
<span class="sourceLineNo">394</span>         * @param a dataset<a name="line.394"></a>
<span class="sourceLineNo">395</span>         * @param axis<a name="line.395"></a>
<span class="sourceLineNo">396</span>         * @return median<a name="line.396"></a>
<span class="sourceLineNo">397</span>         */<a name="line.397"></a>
<span class="sourceLineNo">398</span>        public static Dataset median(final Dataset a, int axis) {<a name="line.398"></a>
<span class="sourceLineNo">399</span>                axis = a.checkAxis(axis);<a name="line.399"></a>
<span class="sourceLineNo">400</span>                return getQStatistics(a, axis).getQuantile(axis, QStatisticsImpl.Q2);<a name="line.400"></a>
<span class="sourceLineNo">401</span>        }<a name="line.401"></a>
<span class="sourceLineNo">402</span><a name="line.402"></a>
<span class="sourceLineNo">403</span>        /**<a name="line.403"></a>
<span class="sourceLineNo">404</span>         * @param a dataset<a name="line.404"></a>
<span class="sourceLineNo">405</span>         * @return median<a name="line.405"></a>
<span class="sourceLineNo">406</span>         */<a name="line.406"></a>
<span class="sourceLineNo">407</span>        public static Object median(final Dataset a) {<a name="line.407"></a>
<span class="sourceLineNo">408</span>                return getQStatistics(a).getQuantile(QStatisticsImpl.Q2);<a name="line.408"></a>
<span class="sourceLineNo">409</span>        }<a name="line.409"></a>
<span class="sourceLineNo">410</span><a name="line.410"></a>
<span class="sourceLineNo">411</span>        /**<a name="line.411"></a>
<span class="sourceLineNo">412</span>         * Interquartile range: Q3 - Q1<a name="line.412"></a>
<span class="sourceLineNo">413</span>         * @param a<a name="line.413"></a>
<span class="sourceLineNo">414</span>         * @return range<a name="line.414"></a>
<span class="sourceLineNo">415</span>         */<a name="line.415"></a>
<span class="sourceLineNo">416</span>        @SuppressWarnings("unchecked")<a name="line.416"></a>
<span class="sourceLineNo">417</span>        public static Object iqr(final Dataset a) {<a name="line.417"></a>
<span class="sourceLineNo">418</span>                final int is = a.getElementsPerItem();<a name="line.418"></a>
<span class="sourceLineNo">419</span>                if (is == 1) {<a name="line.419"></a>
<span class="sourceLineNo">420</span>                        QStatisticsImpl&lt;Double&gt; qs = (QStatisticsImpl&lt;Double&gt;) getQStatistics(a);<a name="line.420"></a>
<span class="sourceLineNo">421</span>                        return qs.getQuantile(QStatisticsImpl.Q3) - qs.getQuantile(QStatisticsImpl.Q1);<a name="line.421"></a>
<span class="sourceLineNo">422</span>                }<a name="line.422"></a>
<span class="sourceLineNo">423</span><a name="line.423"></a>
<span class="sourceLineNo">424</span>                QStatisticsImpl&lt;double[]&gt; qs = (QStatisticsImpl&lt;double[]&gt;) getQStatistics(a);<a name="line.424"></a>
<span class="sourceLineNo">425</span>                double[] q1 = (double[]) qs.getQuantile(QStatisticsImpl.Q1);<a name="line.425"></a>
<span class="sourceLineNo">426</span>                double[] q3 = ((double[]) qs.getQuantile(QStatisticsImpl.Q3)).clone();<a name="line.426"></a>
<span class="sourceLineNo">427</span>                for (int j = 0; j &lt; is; j++) {<a name="line.427"></a>
<span class="sourceLineNo">428</span>                        q3[j] -= q1[j];<a name="line.428"></a>
<span class="sourceLineNo">429</span>                }<a name="line.429"></a>
<span class="sourceLineNo">430</span>                return q3;<a name="line.430"></a>
<span class="sourceLineNo">431</span>        }<a name="line.431"></a>
<span class="sourceLineNo">432</span><a name="line.432"></a>
<span class="sourceLineNo">433</span>        /**<a name="line.433"></a>
<span class="sourceLineNo">434</span>         * Interquartile range: Q3 - Q1<a name="line.434"></a>
<span class="sourceLineNo">435</span>         * @param a<a name="line.435"></a>
<span class="sourceLineNo">436</span>         * @param axis<a name="line.436"></a>
<span class="sourceLineNo">437</span>         * @return range<a name="line.437"></a>
<span class="sourceLineNo">438</span>         */<a name="line.438"></a>
<span class="sourceLineNo">439</span>        public static Dataset iqr(final Dataset a, int axis) {<a name="line.439"></a>
<span class="sourceLineNo">440</span>                axis = a.checkAxis(axis);<a name="line.440"></a>
<span class="sourceLineNo">441</span>                QStatisticsImpl&lt;?&gt; qs = getQStatistics(a, axis);<a name="line.441"></a>
<span class="sourceLineNo">442</span>                Dataset q3 = qs.getQuantile(axis, QStatisticsImpl.Q3);<a name="line.442"></a>
<span class="sourceLineNo">443</span><a name="line.443"></a>
<span class="sourceLineNo">444</span>                return Maths.subtract(q3, qs.getQuantile(axis, QStatisticsImpl.Q1));<a name="line.444"></a>
<span class="sourceLineNo">445</span>        }<a name="line.445"></a>
<span class="sourceLineNo">446</span><a name="line.446"></a>
<span class="sourceLineNo">447</span>        static private HigherStatisticsImpl&lt;?&gt; getHigherStatistic(final Dataset a, boolean[] ignoreInvalids) {<a name="line.447"></a>
<span class="sourceLineNo">448</span>                boolean ignoreNaNs = false;<a name="line.448"></a>
<span class="sourceLineNo">449</span>                boolean ignoreInfs = false;<a name="line.449"></a>
<span class="sourceLineNo">450</span>                if (a.hasFloatingPointElements()) {<a name="line.450"></a>
<span class="sourceLineNo">451</span>                        ignoreNaNs = ignoreInvalids != null &amp;&amp; ignoreInvalids.length &gt; 0 ? ignoreInvalids[0] : false;<a name="line.451"></a>
<span class="sourceLineNo">452</span>                        ignoreInfs = ignoreInvalids != null &amp;&amp; ignoreInvalids.length &gt; 1 ? ignoreInvalids[1] : ignoreNaNs;<a name="line.452"></a>
<span class="sourceLineNo">453</span>                }<a name="line.453"></a>
<span class="sourceLineNo">454</span><a name="line.454"></a>
<span class="sourceLineNo">455</span>                HigherStatisticsImpl&lt;?&gt; stats = a.getFirstMetadata(HigherStatisticsImpl.class);<a name="line.455"></a>
<span class="sourceLineNo">456</span>                if (stats == null || stats.isDirty) {<a name="line.456"></a>
<span class="sourceLineNo">457</span>                        stats = calculateHigherMoments(a, ignoreNaNs, ignoreInfs);<a name="line.457"></a>
<span class="sourceLineNo">458</span>                        a.setMetadata(stats);<a name="line.458"></a>
<span class="sourceLineNo">459</span>                }<a name="line.459"></a>
<span class="sourceLineNo">460</span>        <a name="line.460"></a>
<span class="sourceLineNo">461</span>                return stats;<a name="line.461"></a>
<span class="sourceLineNo">462</span>        }<a name="line.462"></a>
<span class="sourceLineNo">463</span><a name="line.463"></a>
<span class="sourceLineNo">464</span>        static private HigherStatisticsImpl&lt;?&gt; getHigherStatistic(final Dataset a, final boolean[] ignoreInvalids, final int axis) {<a name="line.464"></a>
<span class="sourceLineNo">465</span>                boolean ignoreNaNs = false;<a name="line.465"></a>
<span class="sourceLineNo">466</span>                boolean ignoreInfs = false;<a name="line.466"></a>
<span class="sourceLineNo">467</span>                if (a.hasFloatingPointElements()) {<a name="line.467"></a>
<span class="sourceLineNo">468</span>                        ignoreNaNs = ignoreInvalids != null &amp;&amp; ignoreInvalids.length &gt; 0 ? ignoreInvalids[0] : false;<a name="line.468"></a>
<span class="sourceLineNo">469</span>                        ignoreInfs = ignoreInvalids != null &amp;&amp; ignoreInvalids.length &gt; 1 ? ignoreInvalids[1] : ignoreNaNs;<a name="line.469"></a>
<span class="sourceLineNo">470</span>                }<a name="line.470"></a>
<span class="sourceLineNo">471</span>        <a name="line.471"></a>
<span class="sourceLineNo">472</span>                HigherStatisticsImpl&lt;?&gt; stats = a.getFirstMetadata(HigherStatisticsImpl.class);<a name="line.472"></a>
<span class="sourceLineNo">473</span>                if (stats == null || stats.getSkewness(axis) == null || stats.isDirty) {<a name="line.473"></a>
<span class="sourceLineNo">474</span>                        stats = calculateHigherMoments(a, ignoreNaNs, ignoreInfs, axis);<a name="line.474"></a>
<span class="sourceLineNo">475</span>                        a.setMetadata(stats);<a name="line.475"></a>
<span class="sourceLineNo">476</span>                }<a name="line.476"></a>
<span class="sourceLineNo">477</span>        <a name="line.477"></a>
<span class="sourceLineNo">478</span>                return stats;<a name="line.478"></a>
<span class="sourceLineNo">479</span>        }<a name="line.479"></a>
<span class="sourceLineNo">480</span><a name="line.480"></a>
<span class="sourceLineNo">481</span>        private static class HigherStatisticsImpl&lt;T&gt; implements MetadataType {<a name="line.481"></a>
<span class="sourceLineNo">482</span>                private static final long serialVersionUID = -6587974784104116792L;<a name="line.482"></a>
<span class="sourceLineNo">483</span>                T skewness;<a name="line.483"></a>
<span class="sourceLineNo">484</span>                T kurtosis;<a name="line.484"></a>
<span class="sourceLineNo">485</span>                transient Map&lt;Integer, ReferencedDataset&gt; smap = new HashMap&lt;&gt;();<a name="line.485"></a>
<span class="sourceLineNo">486</span>                transient Map&lt;Integer, ReferencedDataset&gt; kmap = new HashMap&lt;&gt;();<a name="line.486"></a>
<span class="sourceLineNo">487</span><a name="line.487"></a>
<span class="sourceLineNo">488</span>                @Dirtiable<a name="line.488"></a>
<span class="sourceLineNo">489</span>                private boolean isDirty = true;<a name="line.489"></a>
<span class="sourceLineNo">490</span><a name="line.490"></a>
<span class="sourceLineNo">491</span>                @Override<a name="line.491"></a>
<span class="sourceLineNo">492</span>                public HigherStatisticsImpl&lt;T&gt; clone() {<a name="line.492"></a>
<span class="sourceLineNo">493</span>                        return new HigherStatisticsImpl&lt;&gt;(this);<a name="line.493"></a>
<span class="sourceLineNo">494</span>                }<a name="line.494"></a>
<span class="sourceLineNo">495</span><a name="line.495"></a>
<span class="sourceLineNo">496</span>                public HigherStatisticsImpl() {<a name="line.496"></a>
<span class="sourceLineNo">497</span>                }<a name="line.497"></a>
<span class="sourceLineNo">498</span><a name="line.498"></a>
<span class="sourceLineNo">499</span>                private HigherStatisticsImpl(HigherStatisticsImpl&lt;T&gt; hstats) {<a name="line.499"></a>
<span class="sourceLineNo">500</span>                        skewness = hstats.skewness;<a name="line.500"></a>
<span class="sourceLineNo">501</span>                        kurtosis = hstats.kurtosis;<a name="line.501"></a>
<span class="sourceLineNo">502</span>                        smap.putAll(hstats.smap);<a name="line.502"></a>
<span class="sourceLineNo">503</span>                        kmap.putAll(hstats.kmap);<a name="line.503"></a>
<span class="sourceLineNo">504</span>                        isDirty = hstats.isDirty;<a name="line.504"></a>
<span class="sourceLineNo">505</span>                }<a name="line.505"></a>
<span class="sourceLineNo">506</span><a name="line.506"></a>
<span class="sourceLineNo">507</span>//              public void setSkewness(T skewness) {<a name="line.507"></a>
<span class="sourceLineNo">508</span>//                      this.skewness = skewness;<a name="line.508"></a>
<span class="sourceLineNo">509</span>//              }<a name="line.509"></a>
<span class="sourceLineNo">510</span>//<a name="line.510"></a>
<span class="sourceLineNo">511</span>//              public void setKurtosis(T kurtosis) {<a name="line.511"></a>
<span class="sourceLineNo">512</span>//                      this.kurtosis = kurtosis;<a name="line.512"></a>
<span class="sourceLineNo">513</span>//              }<a name="line.513"></a>
<span class="sourceLineNo">514</span>//<a name="line.514"></a>
<span class="sourceLineNo">515</span>//              public T getSkewness() {<a name="line.515"></a>
<span class="sourceLineNo">516</span>//                      return skewness;<a name="line.516"></a>
<span class="sourceLineNo">517</span>//              }<a name="line.517"></a>
<span class="sourceLineNo">518</span>//<a name="line.518"></a>
<span class="sourceLineNo">519</span>//              public T getKurtosis() {<a name="line.519"></a>
<span class="sourceLineNo">520</span>//                      return kurtosis;<a name="line.520"></a>
<span class="sourceLineNo">521</span>//              }<a name="line.521"></a>
<span class="sourceLineNo">522</span><a name="line.522"></a>
<span class="sourceLineNo">523</span>                public Dataset getSkewness(int axis) {<a name="line.523"></a>
<span class="sourceLineNo">524</span>                        ReferencedDataset rd = smap.get(axis);<a name="line.524"></a>
<span class="sourceLineNo">525</span>                        return rd == null ? null : rd.get();<a name="line.525"></a>
<span class="sourceLineNo">526</span>                }<a name="line.526"></a>
<span class="sourceLineNo">527</span><a name="line.527"></a>
<span class="sourceLineNo">528</span>                public Dataset getKurtosis(int axis) {<a name="line.528"></a>
<span class="sourceLineNo">529</span>                        ReferencedDataset rd = kmap.get(axis);<a name="line.529"></a>
<span class="sourceLineNo">530</span>                        return rd == null ? null : rd.get();<a name="line.530"></a>
<span class="sourceLineNo">531</span>                }<a name="line.531"></a>
<span class="sourceLineNo">532</span><a name="line.532"></a>
<span class="sourceLineNo">533</span>                public void setSkewness(int axis, Dataset s) {<a name="line.533"></a>
<span class="sourceLineNo">534</span>                        smap.put(axis, new ReferencedDataset(s));<a name="line.534"></a>
<span class="sourceLineNo">535</span>                }<a name="line.535"></a>
<span class="sourceLineNo">536</span><a name="line.536"></a>
<span class="sourceLineNo">537</span>                public void setKurtosis(int axis, Dataset k) {<a name="line.537"></a>
<span class="sourceLineNo">538</span>                        kmap.put(axis, new ReferencedDataset(k));<a name="line.538"></a>
<span class="sourceLineNo">539</span>                }<a name="line.539"></a>
<span class="sourceLineNo">540</span>        }<a name="line.540"></a>
<span class="sourceLineNo">541</span><a name="line.541"></a>
<span class="sourceLineNo">542</span>        static private HigherStatisticsImpl&lt;?&gt; calculateHigherMoments(final Dataset a, final boolean ignoreNaNs, final boolean ignoreInfs) {<a name="line.542"></a>
<span class="sourceLineNo">543</span>                final int is = a.getElementsPerItem();<a name="line.543"></a>
<span class="sourceLineNo">544</span>                final IndexIterator iter = a.getIterator();<a name="line.544"></a>
<span class="sourceLineNo">545</span><a name="line.545"></a>
<span class="sourceLineNo">546</span>                if (is == 1) {<a name="line.546"></a>
<span class="sourceLineNo">547</span>                        Skewness s = new Skewness();<a name="line.547"></a>
<span class="sourceLineNo">548</span>                        Kurtosis k = new Kurtosis();<a name="line.548"></a>
<span class="sourceLineNo">549</span>                        if (ignoreNaNs) {<a name="line.549"></a>
<span class="sourceLineNo">550</span>                                while (iter.hasNext()) {<a name="line.550"></a>
<span class="sourceLineNo">551</span>                                        final double x = a.getElementDoubleAbs(iter.index);<a name="line.551"></a>
<span class="sourceLineNo">552</span>                                        if (Double.isNaN(x))<a name="line.552"></a>
<span class="sourceLineNo">553</span>                                                continue;<a name="line.553"></a>
<span class="sourceLineNo">554</span>                                        s.increment(x);<a name="line.554"></a>
<span class="sourceLineNo">555</span>                                        k.increment(x);<a name="line.555"></a>
<span class="sourceLineNo">556</span>                                }<a name="line.556"></a>
<span class="sourceLineNo">557</span>                        } else {<a name="line.557"></a>
<span class="sourceLineNo">558</span>                                while (iter.hasNext()) {<a name="line.558"></a>
<span class="sourceLineNo">559</span>                                        final double x = a.getElementDoubleAbs(iter.index);<a name="line.559"></a>
<span class="sourceLineNo">560</span>                                        s.increment(x);<a name="line.560"></a>
<span class="sourceLineNo">561</span>                                        k.increment(x);<a name="line.561"></a>
<span class="sourceLineNo">562</span>                                }<a name="line.562"></a>
<span class="sourceLineNo">563</span>                        }<a name="line.563"></a>
<span class="sourceLineNo">564</span><a name="line.564"></a>
<span class="sourceLineNo">565</span>                        HigherStatisticsImpl&lt;Double&gt; stats = new HigherStatisticsImpl&lt;Double&gt;();<a name="line.565"></a>
<span class="sourceLineNo">566</span>                        stats.skewness = s.getResult();<a name="line.566"></a>
<span class="sourceLineNo">567</span>                        stats.kurtosis = k.getResult();<a name="line.567"></a>
<span class="sourceLineNo">568</span>                        return stats;<a name="line.568"></a>
<span class="sourceLineNo">569</span>                }<a name="line.569"></a>
<span class="sourceLineNo">570</span>                final Skewness[] s = new Skewness[is];<a name="line.570"></a>
<span class="sourceLineNo">571</span>                final Kurtosis[] k = new Kurtosis[is];<a name="line.571"></a>
<span class="sourceLineNo">572</span><a name="line.572"></a>
<span class="sourceLineNo">573</span>                for (int j = 0; j &lt; is; j++) {<a name="line.573"></a>
<span class="sourceLineNo">574</span>                        s[j] = new Skewness();<a name="line.574"></a>
<span class="sourceLineNo">575</span>                        k[j] = new Kurtosis();<a name="line.575"></a>
<span class="sourceLineNo">576</span>                }<a name="line.576"></a>
<span class="sourceLineNo">577</span>                if (ignoreNaNs) {<a name="line.577"></a>
<span class="sourceLineNo">578</span>                        while (iter.hasNext()) {<a name="line.578"></a>
<span class="sourceLineNo">579</span>                                boolean skip = false;<a name="line.579"></a>
<span class="sourceLineNo">580</span>                                for (int j = 0; j &lt; is; j++) {<a name="line.580"></a>
<span class="sourceLineNo">581</span>                                        if (Double.isNaN(a.getElementDoubleAbs(iter.index + j))) {<a name="line.581"></a>
<span class="sourceLineNo">582</span>                                                skip = true;<a name="line.582"></a>
<span class="sourceLineNo">583</span>                                                break;<a name="line.583"></a>
<span class="sourceLineNo">584</span>                                        }<a name="line.584"></a>
<span class="sourceLineNo">585</span>                                }<a name="line.585"></a>
<span class="sourceLineNo">586</span>                                if (!skip)<a name="line.586"></a>
<span class="sourceLineNo">587</span>                                        for (int j = 0; j &lt; is; j++) {<a name="line.587"></a>
<span class="sourceLineNo">588</span>                                                final double val = a.getElementDoubleAbs(iter.index + j);<a name="line.588"></a>
<span class="sourceLineNo">589</span>                                                s[j].increment(val);<a name="line.589"></a>
<span class="sourceLineNo">590</span>                                                k[j].increment(val);<a name="line.590"></a>
<span class="sourceLineNo">591</span>                                        }<a name="line.591"></a>
<span class="sourceLineNo">592</span>                        }<a name="line.592"></a>
<span class="sourceLineNo">593</span>                } else {<a name="line.593"></a>
<span class="sourceLineNo">594</span>                        while (iter.hasNext()) {<a name="line.594"></a>
<span class="sourceLineNo">595</span>                                for (int j = 0; j &lt; is; j++) {<a name="line.595"></a>
<span class="sourceLineNo">596</span>                                        final double val = a.getElementDoubleAbs(iter.index + j);<a name="line.596"></a>
<span class="sourceLineNo">597</span>                                        s[j].increment(val);<a name="line.597"></a>
<span class="sourceLineNo">598</span>                                        k[j].increment(val);<a name="line.598"></a>
<span class="sourceLineNo">599</span>                                }<a name="line.599"></a>
<span class="sourceLineNo">600</span>                        }<a name="line.600"></a>
<span class="sourceLineNo">601</span>                }<a name="line.601"></a>
<span class="sourceLineNo">602</span>                final double[] ts = new double[is];<a name="line.602"></a>
<span class="sourceLineNo">603</span>                final double[] tk = new double[is];<a name="line.603"></a>
<span class="sourceLineNo">604</span>                for (int j = 0; j &lt; is; j++) {<a name="line.604"></a>
<span class="sourceLineNo">605</span>                        ts[j] = s[j].getResult();<a name="line.605"></a>
<span class="sourceLineNo">606</span>                        tk[j] = k[j].getResult();<a name="line.606"></a>
<span class="sourceLineNo">607</span>                }<a name="line.607"></a>
<span class="sourceLineNo">608</span><a name="line.608"></a>
<span class="sourceLineNo">609</span>                HigherStatisticsImpl&lt;double[]&gt; stats = new HigherStatisticsImpl&lt;double[]&gt;();<a name="line.609"></a>
<span class="sourceLineNo">610</span>                stats.skewness = ts;<a name="line.610"></a>
<span class="sourceLineNo">611</span>                stats.kurtosis = tk;<a name="line.611"></a>
<span class="sourceLineNo">612</span>                return stats;<a name="line.612"></a>
<span class="sourceLineNo">613</span>        }<a name="line.613"></a>
<span class="sourceLineNo">614</span><a name="line.614"></a>
<span class="sourceLineNo">615</span>        static private HigherStatisticsImpl&lt;?&gt; calculateHigherMoments(final Dataset a, final boolean ignoreNaNs, final boolean ignoreInfs, final int axis) {<a name="line.615"></a>
<span class="sourceLineNo">616</span>                final int rank = a.getRank();<a name="line.616"></a>
<span class="sourceLineNo">617</span>                final int is = a.getElementsPerItem();<a name="line.617"></a>
<span class="sourceLineNo">618</span>                final int[] oshape = a.getShape();<a name="line.618"></a>
<span class="sourceLineNo">619</span>                final int alen = oshape[axis];<a name="line.619"></a>
<span class="sourceLineNo">620</span>                oshape[axis] = 1;<a name="line.620"></a>
<span class="sourceLineNo">621</span>        <a name="line.621"></a>
<span class="sourceLineNo">622</span>                final int[] nshape = ShapeUtils.squeezeShape(oshape, false);<a name="line.622"></a>
<span class="sourceLineNo">623</span>                final Dataset sk;<a name="line.623"></a>
<span class="sourceLineNo">624</span>                final Dataset ku;<a name="line.624"></a>
<span class="sourceLineNo">625</span>                HigherStatisticsImpl&lt;?&gt; stats = null;<a name="line.625"></a>
<span class="sourceLineNo">626</span>        <a name="line.626"></a>
<span class="sourceLineNo">627</span>                if (is == 1) {<a name="line.627"></a>
<span class="sourceLineNo">628</span>                        if (stats == null) {<a name="line.628"></a>
<span class="sourceLineNo">629</span>                                stats = new HigherStatisticsImpl&lt;Double&gt;();<a name="line.629"></a>
<span class="sourceLineNo">630</span>                                a.setMetadata(stats);<a name="line.630"></a>
<span class="sourceLineNo">631</span>                        }<a name="line.631"></a>
<span class="sourceLineNo">632</span>                        sk = DatasetFactory.zeros(DoubleDataset.class, nshape);<a name="line.632"></a>
<span class="sourceLineNo">633</span>                        ku = DatasetFactory.zeros(DoubleDataset.class, nshape);<a name="line.633"></a>
<span class="sourceLineNo">634</span>                        final IndexIterator qiter = sk.getIterator(true);<a name="line.634"></a>
<span class="sourceLineNo">635</span>                        final int[] qpos = qiter.getPos();<a name="line.635"></a>
<span class="sourceLineNo">636</span>                        final int[] spos = oshape;<a name="line.636"></a>
<span class="sourceLineNo">637</span>        <a name="line.637"></a>
<span class="sourceLineNo">638</span>                        while (qiter.hasNext()) {<a name="line.638"></a>
<span class="sourceLineNo">639</span>                                int i = 0;<a name="line.639"></a>
<span class="sourceLineNo">640</span>                                for (; i &lt; axis; i++) {<a name="line.640"></a>
<span class="sourceLineNo">641</span>                                        spos[i] = qpos[i];<a name="line.641"></a>
<span class="sourceLineNo">642</span>                                }<a name="line.642"></a>
<span class="sourceLineNo">643</span>                                spos[i++] = 0;<a name="line.643"></a>
<span class="sourceLineNo">644</span>                                for (; i &lt; rank; i++) {<a name="line.644"></a>
<span class="sourceLineNo">645</span>                                        spos[i] = qpos[i - 1];<a name="line.645"></a>
<span class="sourceLineNo">646</span>                                }<a name="line.646"></a>
<span class="sourceLineNo">647</span>        <a name="line.647"></a>
<span class="sourceLineNo">648</span>                                Skewness s = new Skewness();<a name="line.648"></a>
<span class="sourceLineNo">649</span>                                Kurtosis k = new Kurtosis();<a name="line.649"></a>
<span class="sourceLineNo">650</span>                                if (ignoreNaNs) {<a name="line.650"></a>
<span class="sourceLineNo">651</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.651"></a>
<span class="sourceLineNo">652</span>                                                spos[axis] = j;<a name="line.652"></a>
<span class="sourceLineNo">653</span>                                                final double val = a.getDouble(spos);<a name="line.653"></a>
<span class="sourceLineNo">654</span>                                                if (Double.isNaN(val))<a name="line.654"></a>
<span class="sourceLineNo">655</span>                                                        continue;<a name="line.655"></a>
<span class="sourceLineNo">656</span>        <a name="line.656"></a>
<span class="sourceLineNo">657</span>                                                s.increment(val);<a name="line.657"></a>
<span class="sourceLineNo">658</span>                                                k.increment(val);<a name="line.658"></a>
<span class="sourceLineNo">659</span>                                        }<a name="line.659"></a>
<span class="sourceLineNo">660</span>                                } else {<a name="line.660"></a>
<span class="sourceLineNo">661</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.661"></a>
<span class="sourceLineNo">662</span>                                                spos[axis] = j;<a name="line.662"></a>
<span class="sourceLineNo">663</span>                                                final double val = a.getDouble(spos);<a name="line.663"></a>
<span class="sourceLineNo">664</span>                                                s.increment(val);<a name="line.664"></a>
<span class="sourceLineNo">665</span>                                                k.increment(val);<a name="line.665"></a>
<span class="sourceLineNo">666</span>                                        }<a name="line.666"></a>
<span class="sourceLineNo">667</span>                                }<a name="line.667"></a>
<span class="sourceLineNo">668</span>                                sk.set(s.getResult(), qpos);<a name="line.668"></a>
<span class="sourceLineNo">669</span>                                ku.set(k.getResult(), qpos);<a name="line.669"></a>
<span class="sourceLineNo">670</span>                        }<a name="line.670"></a>
<span class="sourceLineNo">671</span>                } else {<a name="line.671"></a>
<span class="sourceLineNo">672</span>                        if (stats == null) {<a name="line.672"></a>
<span class="sourceLineNo">673</span>                                stats = new HigherStatisticsImpl&lt;double[]&gt;();<a name="line.673"></a>
<span class="sourceLineNo">674</span>                                a.setMetadata(stats);<a name="line.674"></a>
<span class="sourceLineNo">675</span>                        }<a name="line.675"></a>
<span class="sourceLineNo">676</span>                        sk = DatasetFactory.zeros(is, CompoundDoubleDataset.class, nshape);<a name="line.676"></a>
<span class="sourceLineNo">677</span>                        ku = DatasetFactory.zeros(is, CompoundDoubleDataset.class, nshape);<a name="line.677"></a>
<span class="sourceLineNo">678</span>                        final IndexIterator qiter = sk.getIterator(true);<a name="line.678"></a>
<span class="sourceLineNo">679</span>                        final int[] qpos = qiter.getPos();<a name="line.679"></a>
<span class="sourceLineNo">680</span>                        final int[] spos = oshape;<a name="line.680"></a>
<span class="sourceLineNo">681</span>                        final Skewness[] s = new Skewness[is];<a name="line.681"></a>
<span class="sourceLineNo">682</span>                        final Kurtosis[] k = new Kurtosis[is];<a name="line.682"></a>
<span class="sourceLineNo">683</span>                        final double[] ts = new double[is];<a name="line.683"></a>
<span class="sourceLineNo">684</span>                        final double[] tk = new double[is];<a name="line.684"></a>
<span class="sourceLineNo">685</span>        <a name="line.685"></a>
<span class="sourceLineNo">686</span>                        for (int j = 0; j &lt; is; j++) {<a name="line.686"></a>
<span class="sourceLineNo">687</span>                                s[j] = new Skewness();<a name="line.687"></a>
<span class="sourceLineNo">688</span>                                k[j] = new Kurtosis();<a name="line.688"></a>
<span class="sourceLineNo">689</span>                        }<a name="line.689"></a>
<span class="sourceLineNo">690</span>                        while (qiter.hasNext()) {<a name="line.690"></a>
<span class="sourceLineNo">691</span>                                int i = 0;<a name="line.691"></a>
<span class="sourceLineNo">692</span>                                for (; i &lt; axis; i++) {<a name="line.692"></a>
<span class="sourceLineNo">693</span>                                        spos[i] = qpos[i];<a name="line.693"></a>
<span class="sourceLineNo">694</span>                                }<a name="line.694"></a>
<span class="sourceLineNo">695</span>                                spos[i++] = 0;<a name="line.695"></a>
<span class="sourceLineNo">696</span>                                for (; i &lt; rank; i++) {<a name="line.696"></a>
<span class="sourceLineNo">697</span>                                        spos[i] = qpos[i-1];<a name="line.697"></a>
<span class="sourceLineNo">698</span>                                }<a name="line.698"></a>
<span class="sourceLineNo">699</span>        <a name="line.699"></a>
<span class="sourceLineNo">700</span>                                for (int j = 0; j &lt; is; j++) {<a name="line.700"></a>
<span class="sourceLineNo">701</span>                                        s[j].clear();<a name="line.701"></a>
<span class="sourceLineNo">702</span>                                        k[j].clear();<a name="line.702"></a>
<span class="sourceLineNo">703</span>                                }<a name="line.703"></a>
<span class="sourceLineNo">704</span>                                int index = a.get1DIndex(spos);<a name="line.704"></a>
<span class="sourceLineNo">705</span>                                if (ignoreNaNs) {<a name="line.705"></a>
<span class="sourceLineNo">706</span>                                        boolean skip = false;<a name="line.706"></a>
<span class="sourceLineNo">707</span>                                        for (int j = 0; j &lt; is; j++) {<a name="line.707"></a>
<span class="sourceLineNo">708</span>                                                if (Double.isNaN(a.getElementDoubleAbs(index + j))) {<a name="line.708"></a>
<span class="sourceLineNo">709</span>                                                        skip = true;<a name="line.709"></a>
<span class="sourceLineNo">710</span>                                                        break;<a name="line.710"></a>
<span class="sourceLineNo">711</span>                                                }<a name="line.711"></a>
<span class="sourceLineNo">712</span>                                        }<a name="line.712"></a>
<span class="sourceLineNo">713</span>                                        if (!skip)<a name="line.713"></a>
<span class="sourceLineNo">714</span>                                                for (int j = 0; j &lt; is; j++) {<a name="line.714"></a>
<span class="sourceLineNo">715</span>                                                        final double val = a.getElementDoubleAbs(index + j);<a name="line.715"></a>
<span class="sourceLineNo">716</span>                                                        s[j].increment(val);<a name="line.716"></a>
<span class="sourceLineNo">717</span>                                                        k[j].increment(val);<a name="line.717"></a>
<span class="sourceLineNo">718</span>                                                }<a name="line.718"></a>
<span class="sourceLineNo">719</span>                                } else {<a name="line.719"></a>
<span class="sourceLineNo">720</span>                                        for (int j = 0; j &lt; is; j++) {<a name="line.720"></a>
<span class="sourceLineNo">721</span>                                                final double val = a.getElementDoubleAbs(index + j);<a name="line.721"></a>
<span class="sourceLineNo">722</span>                                                s[j].increment(val);<a name="line.722"></a>
<span class="sourceLineNo">723</span>                                                k[j].increment(val);<a name="line.723"></a>
<span class="sourceLineNo">724</span>                                        }<a name="line.724"></a>
<span class="sourceLineNo">725</span>                                }<a name="line.725"></a>
<span class="sourceLineNo">726</span>                                for (int j = 0; j &lt; is; j++) {<a name="line.726"></a>
<span class="sourceLineNo">727</span>                                        ts[j] = s[j].getResult(); <a name="line.727"></a>
<span class="sourceLineNo">728</span>                                        tk[j] = k[j].getResult(); <a name="line.728"></a>
<span class="sourceLineNo">729</span>                                }<a name="line.729"></a>
<span class="sourceLineNo">730</span>                                sk.set(ts, qpos);<a name="line.730"></a>
<span class="sourceLineNo">731</span>                                ku.set(tk, qpos);<a name="line.731"></a>
<span class="sourceLineNo">732</span>                        }<a name="line.732"></a>
<span class="sourceLineNo">733</span>                }<a name="line.733"></a>
<span class="sourceLineNo">734</span><a name="line.734"></a>
<span class="sourceLineNo">735</span>                stats.setSkewness(axis, sk);<a name="line.735"></a>
<span class="sourceLineNo">736</span>                stats.setKurtosis(axis, ku);<a name="line.736"></a>
<span class="sourceLineNo">737</span>                return stats;<a name="line.737"></a>
<span class="sourceLineNo">738</span>        }<a name="line.738"></a>
<span class="sourceLineNo">739</span><a name="line.739"></a>
<span class="sourceLineNo">740</span>        /**<a name="line.740"></a>
<span class="sourceLineNo">741</span>         * @param a dataset<a name="line.741"></a>
<span class="sourceLineNo">742</span>         * @param ignoreInvalids see {@link IDataset#max(boolean...)}<a name="line.742"></a>
<span class="sourceLineNo">743</span>         * @return skewness<a name="line.743"></a>
<span class="sourceLineNo">744</span>         * @since 2.0<a name="line.744"></a>
<span class="sourceLineNo">745</span>         */<a name="line.745"></a>
<span class="sourceLineNo">746</span>        public static Object skewness(final Dataset a, final boolean... ignoreInvalids) {<a name="line.746"></a>
<span class="sourceLineNo">747</span>                return getHigherStatistic(a, ignoreInvalids).skewness;<a name="line.747"></a>
<span class="sourceLineNo">748</span>        }<a name="line.748"></a>
<span class="sourceLineNo">749</span><a name="line.749"></a>
<span class="sourceLineNo">750</span>        /**<a name="line.750"></a>
<span class="sourceLineNo">751</span>         * @param a dataset<a name="line.751"></a>
<span class="sourceLineNo">752</span>         * @param ignoreInvalids see {@link IDataset#max(boolean...)}<a name="line.752"></a>
<span class="sourceLineNo">753</span>         * @return kurtosis<a name="line.753"></a>
<span class="sourceLineNo">754</span>         * @since 2.0<a name="line.754"></a>
<span class="sourceLineNo">755</span>         */<a name="line.755"></a>
<span class="sourceLineNo">756</span>        public static Object kurtosis(final Dataset a, final boolean... ignoreInvalids) {<a name="line.756"></a>
<span class="sourceLineNo">757</span>                return getHigherStatistic(a, ignoreInvalids).kurtosis;<a name="line.757"></a>
<span class="sourceLineNo">758</span>        }<a name="line.758"></a>
<span class="sourceLineNo">759</span><a name="line.759"></a>
<span class="sourceLineNo">760</span>        /**<a name="line.760"></a>
<span class="sourceLineNo">761</span>         * @param a dataset<a name="line.761"></a>
<span class="sourceLineNo">762</span>         * @param axis<a name="line.762"></a>
<span class="sourceLineNo">763</span>         * @param ignoreInvalids see {@link Dataset#max(int, boolean...)}<a name="line.763"></a>
<span class="sourceLineNo">764</span>         * @return skewness along axis in dataset<a name="line.764"></a>
<span class="sourceLineNo">765</span>         * @since 2.0<a name="line.765"></a>
<span class="sourceLineNo">766</span>         */<a name="line.766"></a>
<span class="sourceLineNo">767</span>        public static Dataset skewness(final Dataset a, int axis, final boolean... ignoreInvalids) {<a name="line.767"></a>
<span class="sourceLineNo">768</span>                axis = a.checkAxis(axis);<a name="line.768"></a>
<span class="sourceLineNo">769</span>                return getHigherStatistic(a, ignoreInvalids, axis).getSkewness(axis);<a name="line.769"></a>
<span class="sourceLineNo">770</span>        }<a name="line.770"></a>
<span class="sourceLineNo">771</span><a name="line.771"></a>
<span class="sourceLineNo">772</span>        /**<a name="line.772"></a>
<span class="sourceLineNo">773</span>         * @param a dataset<a name="line.773"></a>
<span class="sourceLineNo">774</span>         * @param axis<a name="line.774"></a>
<span class="sourceLineNo">775</span>         * @param ignoreInvalids see {@link Dataset#max(int, boolean...)}<a name="line.775"></a>
<span class="sourceLineNo">776</span>         * @return kurtosis along axis in dataset<a name="line.776"></a>
<span class="sourceLineNo">777</span>         * @since 2.0<a name="line.777"></a>
<span class="sourceLineNo">778</span>         */<a name="line.778"></a>
<span class="sourceLineNo">779</span>        public static Dataset kurtosis(final Dataset a, int axis, final boolean... ignoreInvalids) {<a name="line.779"></a>
<span class="sourceLineNo">780</span>                axis = a.checkAxis(axis);<a name="line.780"></a>
<span class="sourceLineNo">781</span>                return getHigherStatistic(a, ignoreInvalids, axis).getKurtosis(axis);<a name="line.781"></a>
<span class="sourceLineNo">782</span>        }<a name="line.782"></a>
<span class="sourceLineNo">783</span><a name="line.783"></a>
<span class="sourceLineNo">784</span>        /**<a name="line.784"></a>
<span class="sourceLineNo">785</span>         * @param a dataset<a name="line.785"></a>
<span class="sourceLineNo">786</span>         * @param ignoreInvalids see {@link IDataset#max(boolean...)}<a name="line.786"></a>
<span class="sourceLineNo">787</span>         * @return sum of dataset<a name="line.787"></a>
<span class="sourceLineNo">788</span>         * @since 2.0<a name="line.788"></a>
<span class="sourceLineNo">789</span>         */<a name="line.789"></a>
<span class="sourceLineNo">790</span>        public static Object sum(final Dataset a, final boolean... ignoreInvalids) {<a name="line.790"></a>
<span class="sourceLineNo">791</span>                return a.sum(ignoreInvalids);<a name="line.791"></a>
<span class="sourceLineNo">792</span>        }<a name="line.792"></a>
<span class="sourceLineNo">793</span><a name="line.793"></a>
<span class="sourceLineNo">794</span>        /**<a name="line.794"></a>
<span class="sourceLineNo">795</span>         * @param clazz dataset class<a name="line.795"></a>
<span class="sourceLineNo">796</span>         * @param a dataset<a name="line.796"></a>
<span class="sourceLineNo">797</span>         * @param ignoreInvalids see {@link IDataset#max(boolean...)}<a name="line.797"></a>
<span class="sourceLineNo">798</span>         * @return typed sum of dataset<a name="line.798"></a>
<span class="sourceLineNo">799</span>         * @since 2.3<a name="line.799"></a>
<span class="sourceLineNo">800</span>         */<a name="line.800"></a>
<span class="sourceLineNo">801</span>        public static Object typedSum(final Class&lt;? extends Dataset&gt; clazz, final Dataset a, final boolean... ignoreInvalids) {<a name="line.801"></a>
<span class="sourceLineNo">802</span>                if (a.isComplex()) {<a name="line.802"></a>
<span class="sourceLineNo">803</span>                        Complex m = (Complex) a.sum(ignoreInvalids);<a name="line.803"></a>
<span class="sourceLineNo">804</span>                        return m;<a name="line.804"></a>
<span class="sourceLineNo">805</span>                } else if (a instanceof CompoundDataset) {<a name="line.805"></a>
<span class="sourceLineNo">806</span>                        return InterfaceUtils.fromDoublesToBiggestPrimitives(clazz, (double[]) a.sum(ignoreInvalids));<a name="line.806"></a>
<span class="sourceLineNo">807</span>                }<a name="line.807"></a>
<span class="sourceLineNo">808</span>                return InterfaceUtils.fromDoubleToBiggestNumber(clazz, DTypeUtils.toReal(a.sum(ignoreInvalids)));<a name="line.808"></a>
<span class="sourceLineNo">809</span>        }<a name="line.809"></a>
<span class="sourceLineNo">810</span><a name="line.810"></a>
<span class="sourceLineNo">811</span>        /**<a name="line.811"></a>
<span class="sourceLineNo">812</span>         * @param a dataset<a name="line.812"></a>
<span class="sourceLineNo">813</span>         * @param dtype<a name="line.813"></a>
<span class="sourceLineNo">814</span>         * @param ignoreInvalids see {@link IDataset#max(boolean...)}<a name="line.814"></a>
<span class="sourceLineNo">815</span>         * @return typed sum of dataset<a name="line.815"></a>
<span class="sourceLineNo">816</span>         * @since 2.0<a name="line.816"></a>
<span class="sourceLineNo">817</span>         * @deprecated Please use the class-based method {@link #typedSum(Class, Dataset, boolean...)}<a name="line.817"></a>
<span class="sourceLineNo">818</span>         */<a name="line.818"></a>
<span class="sourceLineNo">819</span>        @Deprecated<a name="line.819"></a>
<span class="sourceLineNo">820</span>        public static Object typedSum(final Dataset a, int dtype, final boolean... ignoreInvalids) {<a name="line.820"></a>
<span class="sourceLineNo">821</span>                return typedSum(DTypeUtils.getInterface(dtype), a, ignoreInvalids);<a name="line.821"></a>
<span class="sourceLineNo">822</span>        }<a name="line.822"></a>
<span class="sourceLineNo">823</span><a name="line.823"></a>
<span class="sourceLineNo">824</span>        /**<a name="line.824"></a>
<span class="sourceLineNo">825</span>         * @param clazz dataset class<a name="line.825"></a>
<span class="sourceLineNo">826</span>         * @param a dataset<a name="line.826"></a>
<span class="sourceLineNo">827</span>         * @param axis<a name="line.827"></a>
<span class="sourceLineNo">828</span>         * @param ignoreInvalids see {@link Dataset#max(int, boolean...)}<a name="line.828"></a>
<span class="sourceLineNo">829</span>         * @return typed sum of items along axis in dataset<a name="line.829"></a>
<span class="sourceLineNo">830</span>         * @since 2.3<a name="line.830"></a>
<span class="sourceLineNo">831</span>         */<a name="line.831"></a>
<span class="sourceLineNo">832</span>        public static &lt;T extends Dataset&gt; T typedSum(final Class&lt;T&gt; clazz, final Dataset a, int axis, final boolean... ignoreInvalids) {<a name="line.832"></a>
<span class="sourceLineNo">833</span>                return a.sum(axis, ignoreInvalids).cast(clazz);<a name="line.833"></a>
<span class="sourceLineNo">834</span>        }<a name="line.834"></a>
<span class="sourceLineNo">835</span><a name="line.835"></a>
<span class="sourceLineNo">836</span>        /**<a name="line.836"></a>
<span class="sourceLineNo">837</span>         * @param clazz dataset class<a name="line.837"></a>
<span class="sourceLineNo">838</span>         * @param a dataset<a name="line.838"></a>
<span class="sourceLineNo">839</span>         * @param axes<a name="line.839"></a>
<span class="sourceLineNo">840</span>         * @param ignoreInvalids see {@link Dataset#max(int, boolean...)}<a name="line.840"></a>
<span class="sourceLineNo">841</span>         * @return typed sum of items along axes in dataset<a name="line.841"></a>
<span class="sourceLineNo">842</span>         * @since 2.3<a name="line.842"></a>
<span class="sourceLineNo">843</span>         */<a name="line.843"></a>
<span class="sourceLineNo">844</span>        public static &lt;T extends Dataset&gt; T typedSum(final Class&lt;T&gt; clazz, final Dataset a, int[] axes, final boolean... ignoreInvalids) {<a name="line.844"></a>
<span class="sourceLineNo">845</span>                return a.sum(axes, ignoreInvalids).cast(clazz);<a name="line.845"></a>
<span class="sourceLineNo">846</span>        }<a name="line.846"></a>
<span class="sourceLineNo">847</span><a name="line.847"></a>
<span class="sourceLineNo">848</span>        /**<a name="line.848"></a>
<span class="sourceLineNo">849</span>         * @param a dataset<a name="line.849"></a>
<span class="sourceLineNo">850</span>         * @param dtype<a name="line.850"></a>
<span class="sourceLineNo">851</span>         * @param axis<a name="line.851"></a>
<span class="sourceLineNo">852</span>         * @param ignoreInvalids see {@link Dataset#max(int, boolean...)}<a name="line.852"></a>
<span class="sourceLineNo">853</span>         * @return typed sum of items along axis in dataset<a name="line.853"></a>
<span class="sourceLineNo">854</span>         * @since 2.0<a name="line.854"></a>
<span class="sourceLineNo">855</span>         * @deprecated Please use the class-based method {@link #typedSum(Class, Dataset, axis, boolean...)}<a name="line.855"></a>
<span class="sourceLineNo">856</span>         */<a name="line.856"></a>
<span class="sourceLineNo">857</span>        @Deprecated<a name="line.857"></a>
<span class="sourceLineNo">858</span>        public static Dataset typedSum(final Dataset a, int dtype, int axis, final boolean... ignoreInvalids) {<a name="line.858"></a>
<span class="sourceLineNo">859</span>                return DatasetUtils.cast(a.sum(axis, ignoreInvalids), dtype);<a name="line.859"></a>
<span class="sourceLineNo">860</span>        }<a name="line.860"></a>
<span class="sourceLineNo">861</span><a name="line.861"></a>
<span class="sourceLineNo">862</span>        /**<a name="line.862"></a>
<span class="sourceLineNo">863</span>         * @param a dataset<a name="line.863"></a>
<span class="sourceLineNo">864</span>         * @param ignoreInvalids see {@link IDataset#max(boolean...)}<a name="line.864"></a>
<span class="sourceLineNo">865</span>         * @return product of all items in dataset<a name="line.865"></a>
<span class="sourceLineNo">866</span>         * @since 2.0<a name="line.866"></a>
<span class="sourceLineNo">867</span>         */<a name="line.867"></a>
<span class="sourceLineNo">868</span>        public static Object product(final Dataset a, final boolean... ignoreInvalids) {<a name="line.868"></a>
<span class="sourceLineNo">869</span>                return typedProduct(a.getClass(), a, ignoreInvalids);<a name="line.869"></a>
<span class="sourceLineNo">870</span>        }<a name="line.870"></a>
<span class="sourceLineNo">871</span><a name="line.871"></a>
<span class="sourceLineNo">872</span>        /**<a name="line.872"></a>
<span class="sourceLineNo">873</span>         * @param a dataset<a name="line.873"></a>
<span class="sourceLineNo">874</span>         * @param axis<a name="line.874"></a>
<span class="sourceLineNo">875</span>         * @param ignoreInvalids see {@link Dataset#max(int, boolean...)}<a name="line.875"></a>
<span class="sourceLineNo">876</span>         * @return product of items along axis in dataset<a name="line.876"></a>
<span class="sourceLineNo">877</span>         * @since 2.0<a name="line.877"></a>
<span class="sourceLineNo">878</span>         */<a name="line.878"></a>
<span class="sourceLineNo">879</span>        public static Dataset product(final Dataset a, final int axis, final boolean... ignoreInvalids) {<a name="line.879"></a>
<span class="sourceLineNo">880</span>                return typedProduct(a.getClass(), a, axis, ignoreInvalids);<a name="line.880"></a>
<span class="sourceLineNo">881</span>        }<a name="line.881"></a>
<span class="sourceLineNo">882</span><a name="line.882"></a>
<span class="sourceLineNo">883</span>        /**<a name="line.883"></a>
<span class="sourceLineNo">884</span>         * @param a dataset<a name="line.884"></a>
<span class="sourceLineNo">885</span>         * @param axes<a name="line.885"></a>
<span class="sourceLineNo">886</span>         * @param ignoreInvalids see {@link Dataset#max(int, boolean...)}<a name="line.886"></a>
<span class="sourceLineNo">887</span>         * @return product of items along axes in dataset<a name="line.887"></a>
<span class="sourceLineNo">888</span>         * @since 2.2<a name="line.888"></a>
<span class="sourceLineNo">889</span>         */<a name="line.889"></a>
<span class="sourceLineNo">890</span>        public static Dataset product(final Dataset a, final int[] axes, final boolean... ignoreInvalids) {<a name="line.890"></a>
<span class="sourceLineNo">891</span>                return typedProduct(a.getClass(), a, axes, ignoreInvalids);<a name="line.891"></a>
<span class="sourceLineNo">892</span>        }<a name="line.892"></a>
<span class="sourceLineNo">893</span><a name="line.893"></a>
<span class="sourceLineNo">894</span>        /**<a name="line.894"></a>
<span class="sourceLineNo">895</span>         * @param clazz dataset class<a name="line.895"></a>
<span class="sourceLineNo">896</span>         * @param a dataset<a name="line.896"></a>
<span class="sourceLineNo">897</span>         * @param dtype<a name="line.897"></a>
<span class="sourceLineNo">898</span>         * @param ignoreInvalids see {@link IDataset#max(boolean...)}<a name="line.898"></a>
<span class="sourceLineNo">899</span>         * @return typed product of all items in dataset<a name="line.899"></a>
<span class="sourceLineNo">900</span>         * @since 2.3<a name="line.900"></a>
<span class="sourceLineNo">901</span>         */<a name="line.901"></a>
<span class="sourceLineNo">902</span>        public static Object typedProduct(final Class&lt;? extends Dataset&gt; clazz, final Dataset a, final boolean... ignoreInvalids) {<a name="line.902"></a>
<span class="sourceLineNo">903</span>                return typedProduct(a, DTypeUtils.getDType(clazz), ignoreInvalids);<a name="line.903"></a>
<span class="sourceLineNo">904</span>        }<a name="line.904"></a>
<span class="sourceLineNo">905</span><a name="line.905"></a>
<span class="sourceLineNo">906</span>        /**<a name="line.906"></a>
<span class="sourceLineNo">907</span>         * @param a dataset<a name="line.907"></a>
<span class="sourceLineNo">908</span>         * @param dtype<a name="line.908"></a>
<span class="sourceLineNo">909</span>         * @param ignoreInvalids see {@link IDataset#max(boolean...)}<a name="line.909"></a>
<span class="sourceLineNo">910</span>         * @return typed product of all items in dataset<a name="line.910"></a>
<span class="sourceLineNo">911</span>         * @since 2.0<a name="line.911"></a>
<span class="sourceLineNo">912</span>         * @deprecated Please use the class-based method {@link #typedProduct(Class, Dataset, boolean...)}<a name="line.912"></a>
<span class="sourceLineNo">913</span>         */<a name="line.913"></a>
<span class="sourceLineNo">914</span>        @Deprecated<a name="line.914"></a>
<span class="sourceLineNo">915</span>        public static Object typedProduct(final Dataset a, final int dtype, final boolean... ignoreInvalids) {<a name="line.915"></a>
<span class="sourceLineNo">916</span>                final boolean ignoreNaNs;<a name="line.916"></a>
<span class="sourceLineNo">917</span>                final boolean ignoreInfs;<a name="line.917"></a>
<span class="sourceLineNo">918</span>                if (a.hasFloatingPointElements()) {<a name="line.918"></a>
<span class="sourceLineNo">919</span>                        ignoreNaNs = ignoreInvalids != null &amp;&amp; ignoreInvalids.length &gt; 0 ? ignoreInvalids[0] : false;<a name="line.919"></a>
<span class="sourceLineNo">920</span>                        ignoreInfs = ignoreInvalids != null &amp;&amp; ignoreInvalids.length &gt; 1 ? ignoreInvalids[1] : ignoreNaNs;<a name="line.920"></a>
<span class="sourceLineNo">921</span>                } else {<a name="line.921"></a>
<span class="sourceLineNo">922</span>                        ignoreNaNs = false;<a name="line.922"></a>
<span class="sourceLineNo">923</span>                        ignoreInfs = false;<a name="line.923"></a>
<span class="sourceLineNo">924</span>                }<a name="line.924"></a>
<span class="sourceLineNo">925</span><a name="line.925"></a>
<span class="sourceLineNo">926</span>                if (a.isComplex()) {<a name="line.926"></a>
<span class="sourceLineNo">927</span>                        IndexIterator it = a.getIterator();<a name="line.927"></a>
<span class="sourceLineNo">928</span>                        double rv = 1, iv = 0;<a name="line.928"></a>
<span class="sourceLineNo">929</span><a name="line.929"></a>
<span class="sourceLineNo">930</span>                        while (it.hasNext()) {<a name="line.930"></a>
<span class="sourceLineNo">931</span>                                final double r1 = a.getElementDoubleAbs(it.index);<a name="line.931"></a>
<span class="sourceLineNo">932</span>                                final double i1 = a.getElementDoubleAbs(it.index + 1);<a name="line.932"></a>
<span class="sourceLineNo">933</span>                                if (ignoreNaNs &amp;&amp; (Double.isNaN(r1) || Double.isNaN(i1))) {<a name="line.933"></a>
<span class="sourceLineNo">934</span>                                        continue;<a name="line.934"></a>
<span class="sourceLineNo">935</span>                                }<a name="line.935"></a>
<span class="sourceLineNo">936</span>                                if (ignoreInfs  &amp;&amp; (Double.isInfinite(r1) || Double.isInfinite(i1))) {<a name="line.936"></a>
<span class="sourceLineNo">937</span>                                        continue;<a name="line.937"></a>
<span class="sourceLineNo">938</span>                                }<a name="line.938"></a>
<span class="sourceLineNo">939</span>                                final double tv = r1*rv - i1*iv;<a name="line.939"></a>
<span class="sourceLineNo">940</span>                                iv = r1*iv + i1*rv;<a name="line.940"></a>
<span class="sourceLineNo">941</span>                                rv = tv;<a name="line.941"></a>
<span class="sourceLineNo">942</span>                                if (Double.isNaN(rv) &amp;&amp; Double.isNaN(iv)) {<a name="line.942"></a>
<span class="sourceLineNo">943</span>                                        break;<a name="line.943"></a>
<span class="sourceLineNo">944</span>                                }<a name="line.944"></a>
<span class="sourceLineNo">945</span>                        }<a name="line.945"></a>
<span class="sourceLineNo">946</span><a name="line.946"></a>
<span class="sourceLineNo">947</span>                        return new Complex(rv, iv);<a name="line.947"></a>
<span class="sourceLineNo">948</span>                }<a name="line.948"></a>
<span class="sourceLineNo">949</span><a name="line.949"></a>
<span class="sourceLineNo">950</span>                IndexIterator it = a.getIterator();<a name="line.950"></a>
<span class="sourceLineNo">951</span>                final int is;<a name="line.951"></a>
<span class="sourceLineNo">952</span>                final long[] lresults;<a name="line.952"></a>
<span class="sourceLineNo">953</span>                final double[] dresults;<a name="line.953"></a>
<span class="sourceLineNo">954</span><a name="line.954"></a>
<span class="sourceLineNo">955</span>                switch (dtype) {<a name="line.955"></a>
<span class="sourceLineNo">956</span>                case Dataset.BOOL:<a name="line.956"></a>
<span class="sourceLineNo">957</span>                case Dataset.INT8: case Dataset.INT16:<a name="line.957"></a>
<span class="sourceLineNo">958</span>                case Dataset.INT32: case Dataset.INT64:<a name="line.958"></a>
<span class="sourceLineNo">959</span>                        long lresult = 1;<a name="line.959"></a>
<span class="sourceLineNo">960</span>                        while (it.hasNext()) {<a name="line.960"></a>
<span class="sourceLineNo">961</span>                                lresult *= a.getElementLongAbs(it.index);<a name="line.961"></a>
<span class="sourceLineNo">962</span>                        }<a name="line.962"></a>
<span class="sourceLineNo">963</span>                        return Long.valueOf(lresult);<a name="line.963"></a>
<span class="sourceLineNo">964</span>                case Dataset.ARRAYINT8: case Dataset.ARRAYINT16:<a name="line.964"></a>
<span class="sourceLineNo">965</span>                case Dataset.ARRAYINT32: case Dataset.ARRAYINT64:<a name="line.965"></a>
<span class="sourceLineNo">966</span>                        lresult = 1;<a name="line.966"></a>
<span class="sourceLineNo">967</span>                        is = a.getElementsPerItem();<a name="line.967"></a>
<span class="sourceLineNo">968</span>                        lresults = new long[is];<a name="line.968"></a>
<span class="sourceLineNo">969</span>                        for (int j = 0; j &lt; is; j++) {<a name="line.969"></a>
<span class="sourceLineNo">970</span>                                lresults[j] = 1;<a name="line.970"></a>
<span class="sourceLineNo">971</span>                        }<a name="line.971"></a>
<span class="sourceLineNo">972</span>                        while (it.hasNext()) {<a name="line.972"></a>
<span class="sourceLineNo">973</span>                                for (int j = 0; j &lt; is; j++)<a name="line.973"></a>
<span class="sourceLineNo">974</span>                                        lresults[j] *= a.getElementLongAbs(it.index+j);<a name="line.974"></a>
<span class="sourceLineNo">975</span>                        }<a name="line.975"></a>
<span class="sourceLineNo">976</span>                        return lresults;<a name="line.976"></a>
<span class="sourceLineNo">977</span>                case Dataset.FLOAT32: case Dataset.FLOAT64:<a name="line.977"></a>
<span class="sourceLineNo">978</span>                        double dresult = 1.;<a name="line.978"></a>
<span class="sourceLineNo">979</span>                        while (it.hasNext()) {<a name="line.979"></a>
<span class="sourceLineNo">980</span>                                final double x = a.getElementDoubleAbs(it.index);<a name="line.980"></a>
<span class="sourceLineNo">981</span>                                if (ignoreNaNs &amp;&amp; Double.isNaN(x)) {<a name="line.981"></a>
<span class="sourceLineNo">982</span>                                        continue;<a name="line.982"></a>
<span class="sourceLineNo">983</span>                                }<a name="line.983"></a>
<span class="sourceLineNo">984</span>                                if (ignoreInfs &amp;&amp; Double.isInfinite(x)) {<a name="line.984"></a>
<span class="sourceLineNo">985</span>                                        continue;<a name="line.985"></a>
<span class="sourceLineNo">986</span>                                }<a name="line.986"></a>
<span class="sourceLineNo">987</span>                                dresult *= x;<a name="line.987"></a>
<span class="sourceLineNo">988</span>                                if (Double.isNaN(dresult)) {<a name="line.988"></a>
<span class="sourceLineNo">989</span>                                        break;<a name="line.989"></a>
<span class="sourceLineNo">990</span>                                }<a name="line.990"></a>
<span class="sourceLineNo">991</span>                        }<a name="line.991"></a>
<span class="sourceLineNo">992</span>                        return Double.valueOf(dresult);<a name="line.992"></a>
<span class="sourceLineNo">993</span>                case Dataset.ARRAYFLOAT32:<a name="line.993"></a>
<span class="sourceLineNo">994</span>                case Dataset.ARRAYFLOAT64:<a name="line.994"></a>
<span class="sourceLineNo">995</span>                        is = a.getElementsPerItem();<a name="line.995"></a>
<span class="sourceLineNo">996</span>                        double[] vals = new double[is];<a name="line.996"></a>
<span class="sourceLineNo">997</span>                        dresults = new double[is];<a name="line.997"></a>
<span class="sourceLineNo">998</span>                        for (int j = 0; j &lt; is; j++) {<a name="line.998"></a>
<span class="sourceLineNo">999</span>                                dresults[j] = 1.;<a name="line.999"></a>
<span class="sourceLineNo">1000</span>                        }<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>                        while (it.hasNext()) {<a name="line.1001"></a>
<span class="sourceLineNo">1002</span>                                boolean okay = true;<a name="line.1002"></a>
<span class="sourceLineNo">1003</span>                                for (int j = 0; j &lt; is; j++) {<a name="line.1003"></a>
<span class="sourceLineNo">1004</span>                                        final double val = a.getElementDoubleAbs(it.index + j);<a name="line.1004"></a>
<span class="sourceLineNo">1005</span>                                        if (ignoreNaNs &amp;&amp; Double.isNaN(val)) {<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>                                                okay = false;<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>                                                break;<a name="line.1007"></a>
<span class="sourceLineNo">1008</span>                                        }<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>                                        if (ignoreInfs &amp;&amp; Double.isInfinite(val)) {<a name="line.1009"></a>
<span class="sourceLineNo">1010</span>                                                okay = false;<a name="line.1010"></a>
<span class="sourceLineNo">1011</span>                                                break;<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>                                        }<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>                                        vals[j] = val;<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>                                }<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>                                if (okay) {<a name="line.1015"></a>
<span class="sourceLineNo">1016</span>                                        for (int j = 0; j &lt; is; j++) {<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>                                                double val = vals[j];<a name="line.1017"></a>
<span class="sourceLineNo">1018</span>                                                dresults[j] *= val;<a name="line.1018"></a>
<span class="sourceLineNo">1019</span>                                        }<a name="line.1019"></a>
<span class="sourceLineNo">1020</span>                                }<a name="line.1020"></a>
<span class="sourceLineNo">1021</span>                        }<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>                        return dresults;<a name="line.1022"></a>
<span class="sourceLineNo">1023</span>                }<a name="line.1023"></a>
<span class="sourceLineNo">1024</span><a name="line.1024"></a>
<span class="sourceLineNo">1025</span>                return null;<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>        }<a name="line.1026"></a>
<span class="sourceLineNo">1027</span><a name="line.1027"></a>
<span class="sourceLineNo">1028</span>        /**<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>         * @param clazz dataset class<a name="line.1029"></a>
<span class="sourceLineNo">1030</span>         * @param a dataset<a name="line.1030"></a>
<span class="sourceLineNo">1031</span>         * @param axis<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>         * @param ignoreInvalids see {@link IDataset#max(boolean...)}<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>         * @return typed product of items along axis in dataset<a name="line.1033"></a>
<span class="sourceLineNo">1034</span>         * @since 2.3<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>         */<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>        public static &lt;T extends Dataset&gt; T typedProduct(final Class&lt;T&gt; clazz, final Dataset a, int axis, final boolean... ignoreInvalids) {<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>                return typedProduct(clazz, a, new int[] {axis}, ignoreInvalids);<a name="line.1037"></a>
<span class="sourceLineNo">1038</span>        }<a name="line.1038"></a>
<span class="sourceLineNo">1039</span><a name="line.1039"></a>
<span class="sourceLineNo">1040</span>        /**<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>         * @param clazz dataset class<a name="line.1041"></a>
<span class="sourceLineNo">1042</span>         * @param a dataset<a name="line.1042"></a>
<span class="sourceLineNo">1043</span>         * @param axes<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>         * @param ignoreInvalids see {@link IDataset#max(boolean...)}<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>         * @return typed product of items in axes of dataset<a name="line.1045"></a>
<span class="sourceLineNo">1046</span>         * @since 2.3<a name="line.1046"></a>
<span class="sourceLineNo">1047</span>         */<a name="line.1047"></a>
<span class="sourceLineNo">1048</span>        @SuppressWarnings("unchecked")<a name="line.1048"></a>
<span class="sourceLineNo">1049</span>        public static &lt;T extends Dataset&gt; T typedProduct(final Class&lt;T&gt; clazz, final Dataset a, int[] axes, final boolean... ignoreInvalids) {<a name="line.1049"></a>
<span class="sourceLineNo">1050</span>                return (T) typedProduct(a, DTypeUtils.getDType(clazz), axes, ignoreInvalids);<a name="line.1050"></a>
<span class="sourceLineNo">1051</span>        }<a name="line.1051"></a>
<span class="sourceLineNo">1052</span><a name="line.1052"></a>
<span class="sourceLineNo">1053</span>        /**<a name="line.1053"></a>
<span class="sourceLineNo">1054</span>         * @param a dataset<a name="line.1054"></a>
<span class="sourceLineNo">1055</span>         * @param dtype<a name="line.1055"></a>
<span class="sourceLineNo">1056</span>         * @param axis<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>         * @param ignoreInvalids see {@link IDataset#max(boolean...)}<a name="line.1057"></a>
<span class="sourceLineNo">1058</span>         * @return typed product of items along axis in dataset<a name="line.1058"></a>
<span class="sourceLineNo">1059</span>         * @since 2.0<a name="line.1059"></a>
<span class="sourceLineNo">1060</span>         * @deprecated Please use the class-based method {@link #typedProduct(Class, Dataset, int, boolean...)}<a name="line.1060"></a>
<span class="sourceLineNo">1061</span>         */<a name="line.1061"></a>
<span class="sourceLineNo">1062</span>        @Deprecated<a name="line.1062"></a>
<span class="sourceLineNo">1063</span>        public static Dataset typedProduct(final Dataset a, final int dtype, int axis, final boolean... ignoreInvalids) {<a name="line.1063"></a>
<span class="sourceLineNo">1064</span>                return typedProduct(a, dtype, new int[] {axis}, ignoreInvalids);<a name="line.1064"></a>
<span class="sourceLineNo">1065</span>        }<a name="line.1065"></a>
<span class="sourceLineNo">1066</span><a name="line.1066"></a>
<span class="sourceLineNo">1067</span>        /**<a name="line.1067"></a>
<span class="sourceLineNo">1068</span>         * @param a dataset<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>         * @param dtype<a name="line.1069"></a>
<span class="sourceLineNo">1070</span>         * @param axes<a name="line.1070"></a>
<span class="sourceLineNo">1071</span>         * @param ignoreInvalids see {@link IDataset#max(boolean...)}<a name="line.1071"></a>
<span class="sourceLineNo">1072</span>         * @return typed product of items in axes of dataset<a name="line.1072"></a>
<span class="sourceLineNo">1073</span>         * @since 2.2<a name="line.1073"></a>
<span class="sourceLineNo">1074</span>         * @deprecated Please use the class-based method {@link #typedProduct(Class, Dataset, int[], boolean...)}<a name="line.1074"></a>
<span class="sourceLineNo">1075</span>         */<a name="line.1075"></a>
<span class="sourceLineNo">1076</span>        @Deprecated<a name="line.1076"></a>
<span class="sourceLineNo">1077</span>        public static Dataset typedProduct(final Dataset a, final int dtype, int[] axes, final boolean... ignoreInvalids) {<a name="line.1077"></a>
<span class="sourceLineNo">1078</span>                axes = ShapeUtils.checkAxes(a.getRank(), axes);<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>                SliceNDIterator siter = new SliceNDIterator(new SliceND(a.getShapeRef()), axes);<a name="line.1079"></a>
<span class="sourceLineNo">1080</span><a name="line.1080"></a>
<span class="sourceLineNo">1081</span>                int[] nshape = siter.getUsedSlice().getSourceShape();<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>                final int is = a.getElementsPerItem();<a name="line.1082"></a>
<span class="sourceLineNo">1083</span><a name="line.1083"></a>
<span class="sourceLineNo">1084</span>                final boolean ignoreNaNs;<a name="line.1084"></a>
<span class="sourceLineNo">1085</span>                final boolean ignoreInfs;<a name="line.1085"></a>
<span class="sourceLineNo">1086</span>                if (a.hasFloatingPointElements()) {<a name="line.1086"></a>
<span class="sourceLineNo">1087</span>                        ignoreNaNs = ignoreInvalids != null &amp;&amp; ignoreInvalids.length &gt; 0 ? ignoreInvalids[0] : false;<a name="line.1087"></a>
<span class="sourceLineNo">1088</span>                        ignoreInfs = ignoreInvalids != null &amp;&amp; ignoreInvalids.length &gt; 1 ? ignoreInvalids[1] : ignoreNaNs;<a name="line.1088"></a>
<span class="sourceLineNo">1089</span>                } else {<a name="line.1089"></a>
<span class="sourceLineNo">1090</span>                        ignoreNaNs = false;<a name="line.1090"></a>
<span class="sourceLineNo">1091</span>                        ignoreInfs = false;<a name="line.1091"></a>
<span class="sourceLineNo">1092</span>                }<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>                Dataset result = DatasetFactory.zeros(is, nshape, dtype);<a name="line.1093"></a>
<span class="sourceLineNo">1094</span><a name="line.1094"></a>
<span class="sourceLineNo">1095</span>                int[] spos = siter.getUsedPos();<a name="line.1095"></a>
<span class="sourceLineNo">1096</span><a name="line.1096"></a>
<span class="sourceLineNo">1097</span>                // TODO add getLongArray(long[], int...) to CompoundDataset<a name="line.1097"></a>
<span class="sourceLineNo">1098</span>                final boolean isComplex = a.isComplex();<a name="line.1098"></a>
<span class="sourceLineNo">1099</span>                while (siter.hasNext()) {<a name="line.1099"></a>
<span class="sourceLineNo">1100</span>                        IndexIterator iter = a.getSliceIterator(siter.getCurrentSlice());<a name="line.1100"></a>
<span class="sourceLineNo">1101</span>                        final int[] pos = iter.getPos();<a name="line.1101"></a>
<span class="sourceLineNo">1102</span><a name="line.1102"></a>
<span class="sourceLineNo">1103</span>                        if (isComplex) {<a name="line.1103"></a>
<span class="sourceLineNo">1104</span>                                double rv = 1, iv = 0;<a name="line.1104"></a>
<span class="sourceLineNo">1105</span>                                switch (dtype) {<a name="line.1105"></a>
<span class="sourceLineNo">1106</span>                                case Dataset.COMPLEX64:<a name="line.1106"></a>
<span class="sourceLineNo">1107</span>                                        ComplexFloatDataset af = (ComplexFloatDataset) a;<a name="line.1107"></a>
<span class="sourceLineNo">1108</span>                                        while (iter.hasNext()) {<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>                                                final float r1 = af.getReal(pos);<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>                                                final float i1 = af.getImag(pos);<a name="line.1110"></a>
<span class="sourceLineNo">1111</span>                                                if (ignoreNaNs &amp;&amp; (Float.isNaN(r1) || Float.isNaN(i1))) {<a name="line.1111"></a>
<span class="sourceLineNo">1112</span>                                                        continue;<a name="line.1112"></a>
<span class="sourceLineNo">1113</span>                                                }<a name="line.1113"></a>
<span class="sourceLineNo">1114</span>                                                if (ignoreInfs  &amp;&amp; (Float.isInfinite(r1) || Float.isInfinite(i1))) {<a name="line.1114"></a>
<span class="sourceLineNo">1115</span>                                                        continue;<a name="line.1115"></a>
<span class="sourceLineNo">1116</span>                                                }<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>                                                final double tv = r1*rv - i1*iv;<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>                                                iv = r1*iv + i1*rv;<a name="line.1118"></a>
<span class="sourceLineNo">1119</span>                                                rv = tv;<a name="line.1119"></a>
<span class="sourceLineNo">1120</span>                                                if (Double.isNaN(rv) &amp;&amp; Double.isNaN(iv)) {<a name="line.1120"></a>
<span class="sourceLineNo">1121</span>                                                        break;<a name="line.1121"></a>
<span class="sourceLineNo">1122</span>                                                }<a name="line.1122"></a>
<span class="sourceLineNo">1123</span>                                        }<a name="line.1123"></a>
<span class="sourceLineNo">1124</span>                                        break;<a name="line.1124"></a>
<span class="sourceLineNo">1125</span>                                case Dataset.COMPLEX128:<a name="line.1125"></a>
<span class="sourceLineNo">1126</span>                                        ComplexDoubleDataset ad = (ComplexDoubleDataset) a;<a name="line.1126"></a>
<span class="sourceLineNo">1127</span>                                        while (iter.hasNext()) {<a name="line.1127"></a>
<span class="sourceLineNo">1128</span>                                                final double r1 = ad.getReal(pos);<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>                                                final double i1 = ad.getImag(pos);<a name="line.1129"></a>
<span class="sourceLineNo">1130</span>                                                if (ignoreNaNs &amp;&amp; (Double.isNaN(r1) || Double.isNaN(i1))) {<a name="line.1130"></a>
<span class="sourceLineNo">1131</span>                                                        continue;<a name="line.1131"></a>
<span class="sourceLineNo">1132</span>                                                }<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>                                                if (ignoreInfs  &amp;&amp; (Double.isInfinite(r1) || Double.isInfinite(i1))) {<a name="line.1133"></a>
<span class="sourceLineNo">1134</span>                                                        continue;<a name="line.1134"></a>
<span class="sourceLineNo">1135</span>                                                }<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>                                                final double tv = r1*rv - i1*iv;<a name="line.1136"></a>
<span class="sourceLineNo">1137</span>                                                iv = r1*iv + i1*rv;<a name="line.1137"></a>
<span class="sourceLineNo">1138</span>                                                rv = tv;<a name="line.1138"></a>
<span class="sourceLineNo">1139</span>                                                if (Double.isNaN(rv) &amp;&amp; Double.isNaN(iv)) {<a name="line.1139"></a>
<span class="sourceLineNo">1140</span>                                                        break;<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>                                                }<a name="line.1141"></a>
<span class="sourceLineNo">1142</span>                                        }<a name="line.1142"></a>
<span class="sourceLineNo">1143</span>                                        break;<a name="line.1143"></a>
<span class="sourceLineNo">1144</span>                                }<a name="line.1144"></a>
<span class="sourceLineNo">1145</span><a name="line.1145"></a>
<span class="sourceLineNo">1146</span>                                result.set(new Complex(rv, iv), spos);<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>                        } else {<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>                                final long[] lresults;<a name="line.1148"></a>
<span class="sourceLineNo">1149</span>                                final double[] dresults;<a name="line.1149"></a>
<span class="sourceLineNo">1150</span><a name="line.1150"></a>
<span class="sourceLineNo">1151</span>                                switch (dtype) {<a name="line.1151"></a>
<span class="sourceLineNo">1152</span>                                case Dataset.BOOL:<a name="line.1152"></a>
<span class="sourceLineNo">1153</span>                                case Dataset.INT8: case Dataset.INT16:<a name="line.1153"></a>
<span class="sourceLineNo">1154</span>                                case Dataset.INT32: case Dataset.INT64:<a name="line.1154"></a>
<span class="sourceLineNo">1155</span>                                        long lresult = 1;<a name="line.1155"></a>
<span class="sourceLineNo">1156</span>                                        while (iter.hasNext()) {<a name="line.1156"></a>
<span class="sourceLineNo">1157</span>                                                lresult *= a.getInt(pos);<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>                                        }<a name="line.1158"></a>
<span class="sourceLineNo">1159</span>                                        result.set(lresult, spos);<a name="line.1159"></a>
<span class="sourceLineNo">1160</span>                                        break;<a name="line.1160"></a>
<span class="sourceLineNo">1161</span>                                case Dataset.ARRAYINT8:<a name="line.1161"></a>
<span class="sourceLineNo">1162</span>                                        lresults = new long[is];<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>                                        for (int k = 0; k &lt; is; k++) {<a name="line.1163"></a>
<span class="sourceLineNo">1164</span>                                                lresults[k] = 1;<a name="line.1164"></a>
<span class="sourceLineNo">1165</span>                                        }<a name="line.1165"></a>
<span class="sourceLineNo">1166</span>                                        while (iter.hasNext()) {<a name="line.1166"></a>
<span class="sourceLineNo">1167</span>                                                final byte[] va = (byte[]) a.getObject(pos);<a name="line.1167"></a>
<span class="sourceLineNo">1168</span>                                                for (int k = 0; k &lt; is; k++) {<a name="line.1168"></a>
<span class="sourceLineNo">1169</span>                                                        lresults[k] *= va[k];<a name="line.1169"></a>
<span class="sourceLineNo">1170</span>                                                }<a name="line.1170"></a>
<span class="sourceLineNo">1171</span>                                        }<a name="line.1171"></a>
<span class="sourceLineNo">1172</span>                                        result.set(lresults, spos);<a name="line.1172"></a>
<span class="sourceLineNo">1173</span>                                        break;<a name="line.1173"></a>
<span class="sourceLineNo">1174</span>                                case Dataset.ARRAYINT16:<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>                                        lresults = new long[is];<a name="line.1175"></a>
<span class="sourceLineNo">1176</span>                                        for (int k = 0; k &lt; is; k++) {<a name="line.1176"></a>
<span class="sourceLineNo">1177</span>                                                lresults[k] = 1;<a name="line.1177"></a>
<span class="sourceLineNo">1178</span>                                        }<a name="line.1178"></a>
<span class="sourceLineNo">1179</span>                                        while (iter.hasNext()) {<a name="line.1179"></a>
<span class="sourceLineNo">1180</span>                                                final short[] va = (short[]) a.getObject(pos);<a name="line.1180"></a>
<span class="sourceLineNo">1181</span>                                                for (int k = 0; k &lt; is; k++) {<a name="line.1181"></a>
<span class="sourceLineNo">1182</span>                                                        lresults[k] *= va[k];<a name="line.1182"></a>
<span class="sourceLineNo">1183</span>                                                }<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>                                        }<a name="line.1184"></a>
<span class="sourceLineNo">1185</span>                                        result.set(lresults, spos);<a name="line.1185"></a>
<span class="sourceLineNo">1186</span>                                        break;<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>                                case Dataset.ARRAYINT32:<a name="line.1187"></a>
<span class="sourceLineNo">1188</span>                                        lresults = new long[is];<a name="line.1188"></a>
<span class="sourceLineNo">1189</span>                                        for (int k = 0; k &lt; is; k++) {<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>                                                lresults[k] = 1;<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>                                        }<a name="line.1191"></a>
<span class="sourceLineNo">1192</span>                                        while (iter.hasNext()) {<a name="line.1192"></a>
<span class="sourceLineNo">1193</span>                                                final int[] va = (int[]) a.getObject(pos);<a name="line.1193"></a>
<span class="sourceLineNo">1194</span>                                                for (int k = 0; k &lt; is; k++) {<a name="line.1194"></a>
<span class="sourceLineNo">1195</span>                                                        lresults[k] *= va[k];<a name="line.1195"></a>
<span class="sourceLineNo">1196</span>                                                }<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>                                        }<a name="line.1197"></a>
<span class="sourceLineNo">1198</span>                                        result.set(lresults, spos);<a name="line.1198"></a>
<span class="sourceLineNo">1199</span>                                        break;<a name="line.1199"></a>
<span class="sourceLineNo">1200</span>                                case Dataset.ARRAYINT64:<a name="line.1200"></a>
<span class="sourceLineNo">1201</span>                                        lresults = new long[is];<a name="line.1201"></a>
<span class="sourceLineNo">1202</span>                                        for (int k = 0; k &lt; is; k++) {<a name="line.1202"></a>
<span class="sourceLineNo">1203</span>                                                lresults[k] = 1;<a name="line.1203"></a>
<span class="sourceLineNo">1204</span>                                        }<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>                                        while (iter.hasNext()) {<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>                                                final long[] va = (long[]) a.getObject(pos);<a name="line.1206"></a>
<span class="sourceLineNo">1207</span>                                                for (int k = 0; k &lt; is; k++) {<a name="line.1207"></a>
<span class="sourceLineNo">1208</span>                                                        lresults[k] *= va[k];<a name="line.1208"></a>
<span class="sourceLineNo">1209</span>                                                }<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>                                        }<a name="line.1210"></a>
<span class="sourceLineNo">1211</span>                                        result.set(lresults, spos);<a name="line.1211"></a>
<span class="sourceLineNo">1212</span>                                        break;<a name="line.1212"></a>
<span class="sourceLineNo">1213</span>                                case Dataset.FLOAT32: case Dataset.FLOAT64:<a name="line.1213"></a>
<span class="sourceLineNo">1214</span>                                        double dresult = 1.;<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>                                        while (iter.hasNext()) {<a name="line.1215"></a>
<span class="sourceLineNo">1216</span>                                                final double x = a.getElementDoubleAbs(iter.index); <a name="line.1216"></a>
<span class="sourceLineNo">1217</span>                                                if (ignoreNaNs &amp;&amp; Double.isNaN(x)) {<a name="line.1217"></a>
<span class="sourceLineNo">1218</span>                                                        continue;<a name="line.1218"></a>
<span class="sourceLineNo">1219</span>                                                }<a name="line.1219"></a>
<span class="sourceLineNo">1220</span>                                                if (ignoreInfs &amp;&amp; Double.isInfinite(x)) {<a name="line.1220"></a>
<span class="sourceLineNo">1221</span>                                                        continue;<a name="line.1221"></a>
<span class="sourceLineNo">1222</span>                                                }<a name="line.1222"></a>
<span class="sourceLineNo">1223</span>                                                dresult *= x;<a name="line.1223"></a>
<span class="sourceLineNo">1224</span>                                                if (Double.isNaN(dresult)) {<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>                                                        break;<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>                                                }<a name="line.1226"></a>
<span class="sourceLineNo">1227</span>                                        }<a name="line.1227"></a>
<span class="sourceLineNo">1228</span>                                        result.set(dresult, spos);<a name="line.1228"></a>
<span class="sourceLineNo">1229</span>                                        break;<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>                                case Dataset.ARRAYFLOAT32: case Dataset.ARRAYFLOAT64:<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>                                        CompoundDataset da = (CompoundDataset) a;<a name="line.1231"></a>
<span class="sourceLineNo">1232</span>                                        double[] dvalues = new double[is];<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>                                        dresults = new double[is];<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>                                        for (int k = 0; k &lt; is; k++) {<a name="line.1234"></a>
<span class="sourceLineNo">1235</span>                                                dresults[k] = 1.;<a name="line.1235"></a>
<span class="sourceLineNo">1236</span>                                        }<a name="line.1236"></a>
<span class="sourceLineNo">1237</span>                                        while (iter.hasNext()) {<a name="line.1237"></a>
<span class="sourceLineNo">1238</span>                                                da.getDoubleArrayAbs(iter.index, dvalues);<a name="line.1238"></a>
<span class="sourceLineNo">1239</span>                                                boolean okay = true;<a name="line.1239"></a>
<span class="sourceLineNo">1240</span>                                                for (int k = 0; k &lt; is; k++) {<a name="line.1240"></a>
<span class="sourceLineNo">1241</span>                                                        final double val = dvalues[k];<a name="line.1241"></a>
<span class="sourceLineNo">1242</span>                                                        if (ignoreNaNs &amp;&amp; Double.isNaN(val)) {<a name="line.1242"></a>
<span class="sourceLineNo">1243</span>                                                                okay = false;<a name="line.1243"></a>
<span class="sourceLineNo">1244</span>                                                                break;<a name="line.1244"></a>
<span class="sourceLineNo">1245</span>                                                        }<a name="line.1245"></a>
<span class="sourceLineNo">1246</span>                                                        if (ignoreInfs &amp;&amp; Double.isInfinite(val)) {<a name="line.1246"></a>
<span class="sourceLineNo">1247</span>                                                                okay = false;<a name="line.1247"></a>
<span class="sourceLineNo">1248</span>                                                                break;<a name="line.1248"></a>
<span class="sourceLineNo">1249</span>                                                        }<a name="line.1249"></a>
<span class="sourceLineNo">1250</span>                                                }<a name="line.1250"></a>
<span class="sourceLineNo">1251</span>                                                if (okay) {<a name="line.1251"></a>
<span class="sourceLineNo">1252</span>                                                        for (int k = 0; k &lt; is; k++) {<a name="line.1252"></a>
<span class="sourceLineNo">1253</span>                                                                dresults[k] *= dvalues[k];<a name="line.1253"></a>
<span class="sourceLineNo">1254</span>                                                        }<a name="line.1254"></a>
<span class="sourceLineNo">1255</span>                                                }<a name="line.1255"></a>
<span class="sourceLineNo">1256</span>                                        }<a name="line.1256"></a>
<span class="sourceLineNo">1257</span>                                        result.set(dresults, spos);<a name="line.1257"></a>
<span class="sourceLineNo">1258</span>                                        break;<a name="line.1258"></a>
<span class="sourceLineNo">1259</span>                                }<a name="line.1259"></a>
<span class="sourceLineNo">1260</span>                        }<a name="line.1260"></a>
<span class="sourceLineNo">1261</span>                }<a name="line.1261"></a>
<span class="sourceLineNo">1262</span><a name="line.1262"></a>
<span class="sourceLineNo">1263</span>//              result.setShape(ShapeUtils.squeezeShape(oshape, axes));<a name="line.1263"></a>
<span class="sourceLineNo">1264</span>                return result;<a name="line.1264"></a>
<span class="sourceLineNo">1265</span>        }<a name="line.1265"></a>
<span class="sourceLineNo">1266</span><a name="line.1266"></a>
<span class="sourceLineNo">1267</span>        /**<a name="line.1267"></a>
<span class="sourceLineNo">1268</span>         * @param a dataset<a name="line.1268"></a>
<span class="sourceLineNo">1269</span>         * @param ignoreInvalids see {@link IDataset#max(boolean...)}<a name="line.1269"></a>
<span class="sourceLineNo">1270</span>         * @return cumulative product of items in flattened dataset<a name="line.1270"></a>
<span class="sourceLineNo">1271</span>         * @since 2.0<a name="line.1271"></a>
<span class="sourceLineNo">1272</span>         */<a name="line.1272"></a>
<span class="sourceLineNo">1273</span>        public static Dataset cumulativeProduct(final Dataset a, final boolean... ignoreInvalids) {<a name="line.1273"></a>
<span class="sourceLineNo">1274</span>                return cumulativeProduct(a.flatten(), 0, ignoreInvalids);<a name="line.1274"></a>
<span class="sourceLineNo">1275</span>        }<a name="line.1275"></a>
<span class="sourceLineNo">1276</span><a name="line.1276"></a>
<span class="sourceLineNo">1277</span>        /**<a name="line.1277"></a>
<span class="sourceLineNo">1278</span>         * @param a dataset<a name="line.1278"></a>
<span class="sourceLineNo">1279</span>         * @param axis<a name="line.1279"></a>
<span class="sourceLineNo">1280</span>         * @param ignoreInvalids see {@link Dataset#max(int, boolean...)}<a name="line.1280"></a>
<span class="sourceLineNo">1281</span>         * @return cumulative product of items along axis in dataset<a name="line.1281"></a>
<span class="sourceLineNo">1282</span>         * @since 2.0<a name="line.1282"></a>
<span class="sourceLineNo">1283</span>         */<a name="line.1283"></a>
<span class="sourceLineNo">1284</span>        public static Dataset cumulativeProduct(final Dataset a, int axis, final boolean... ignoreInvalids) {<a name="line.1284"></a>
<span class="sourceLineNo">1285</span>                axis = a.checkAxis(axis);<a name="line.1285"></a>
<span class="sourceLineNo">1286</span>                int dtype = a.getDType();<a name="line.1286"></a>
<span class="sourceLineNo">1287</span>                int[] oshape = a.getShape();<a name="line.1287"></a>
<span class="sourceLineNo">1288</span>                int alen = oshape[axis];<a name="line.1288"></a>
<span class="sourceLineNo">1289</span>                oshape[axis] = 1;<a name="line.1289"></a>
<span class="sourceLineNo">1290</span><a name="line.1290"></a>
<span class="sourceLineNo">1291</span>                final boolean ignoreNaNs;<a name="line.1291"></a>
<span class="sourceLineNo">1292</span>                final boolean ignoreInfs;<a name="line.1292"></a>
<span class="sourceLineNo">1293</span>                if (a.hasFloatingPointElements()) {<a name="line.1293"></a>
<span class="sourceLineNo">1294</span>                        ignoreNaNs = ignoreInvalids != null &amp;&amp; ignoreInvalids.length &gt; 0 ? ignoreInvalids[0] : false;<a name="line.1294"></a>
<span class="sourceLineNo">1295</span>                        ignoreInfs = ignoreInvalids != null &amp;&amp; ignoreInvalids.length &gt; 1 ? ignoreInvalids[1] : ignoreNaNs;<a name="line.1295"></a>
<span class="sourceLineNo">1296</span>                } else {<a name="line.1296"></a>
<span class="sourceLineNo">1297</span>                        ignoreNaNs = false;<a name="line.1297"></a>
<span class="sourceLineNo">1298</span>                        ignoreInfs = false;<a name="line.1298"></a>
<span class="sourceLineNo">1299</span>                }<a name="line.1299"></a>
<span class="sourceLineNo">1300</span>                Dataset result = DatasetFactory.zeros(a);<a name="line.1300"></a>
<span class="sourceLineNo">1301</span>                PositionIterator pi = result.getPositionIterator(axis);<a name="line.1301"></a>
<span class="sourceLineNo">1302</span><a name="line.1302"></a>
<span class="sourceLineNo">1303</span>                int[] pos = pi.getPos();<a name="line.1303"></a>
<span class="sourceLineNo">1304</span><a name="line.1304"></a>
<span class="sourceLineNo">1305</span>                while (pi.hasNext()) {<a name="line.1305"></a>
<span class="sourceLineNo">1306</span><a name="line.1306"></a>
<span class="sourceLineNo">1307</span>                        if (a.isComplex()) {<a name="line.1307"></a>
<span class="sourceLineNo">1308</span>                                double rv = 1, iv = 0;<a name="line.1308"></a>
<span class="sourceLineNo">1309</span>                                switch (dtype) {<a name="line.1309"></a>
<span class="sourceLineNo">1310</span>                                case Dataset.COMPLEX64:<a name="line.1310"></a>
<span class="sourceLineNo">1311</span>                                        ComplexFloatDataset af = (ComplexFloatDataset) a;<a name="line.1311"></a>
<span class="sourceLineNo">1312</span>                                        ComplexFloatDataset rf = (ComplexFloatDataset) result;<a name="line.1312"></a>
<span class="sourceLineNo">1313</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.1313"></a>
<span class="sourceLineNo">1314</span>                                                if (!Double.isNaN(rv) || !Double.isNaN(iv)) {<a name="line.1314"></a>
<span class="sourceLineNo">1315</span>                                                        pos[axis] = j;<a name="line.1315"></a>
<span class="sourceLineNo">1316</span>                                                        final float r1 = af.getReal(pos);<a name="line.1316"></a>
<span class="sourceLineNo">1317</span>                                                        final float i1 = af.getImag(pos);<a name="line.1317"></a>
<span class="sourceLineNo">1318</span>                                                        if (ignoreNaNs &amp;&amp; (Float.isNaN(r1) || Float.isNaN(i1))) {<a name="line.1318"></a>
<span class="sourceLineNo">1319</span>                                                                continue;<a name="line.1319"></a>
<span class="sourceLineNo">1320</span>                                                        }<a name="line.1320"></a>
<span class="sourceLineNo">1321</span>                                                        if (ignoreInfs  &amp;&amp; (Float.isInfinite(r1) || Float.isInfinite(i1))) {<a name="line.1321"></a>
<span class="sourceLineNo">1322</span>                                                                continue;<a name="line.1322"></a>
<span class="sourceLineNo">1323</span>                                                        }<a name="line.1323"></a>
<span class="sourceLineNo">1324</span>                                                        final double tv = r1*rv - i1*iv;<a name="line.1324"></a>
<span class="sourceLineNo">1325</span>                                                        iv = r1*iv + i1*rv;<a name="line.1325"></a>
<span class="sourceLineNo">1326</span>                                                        rv = tv;<a name="line.1326"></a>
<span class="sourceLineNo">1327</span>                                                }<a name="line.1327"></a>
<span class="sourceLineNo">1328</span>                                                rf.set((float) rv, (float) iv, pos);<a name="line.1328"></a>
<span class="sourceLineNo">1329</span>                                        }<a name="line.1329"></a>
<span class="sourceLineNo">1330</span>                                        break;<a name="line.1330"></a>
<span class="sourceLineNo">1331</span>                                case Dataset.COMPLEX128:<a name="line.1331"></a>
<span class="sourceLineNo">1332</span>                                        ComplexDoubleDataset ad = (ComplexDoubleDataset) a;<a name="line.1332"></a>
<span class="sourceLineNo">1333</span>                                        ComplexDoubleDataset rd = (ComplexDoubleDataset) result;<a name="line.1333"></a>
<span class="sourceLineNo">1334</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.1334"></a>
<span class="sourceLineNo">1335</span>                                                if (!Double.isNaN(rv) || !Double.isNaN(iv)) {<a name="line.1335"></a>
<span class="sourceLineNo">1336</span>                                                        pos[axis] = j;<a name="line.1336"></a>
<span class="sourceLineNo">1337</span>                                                        final double r1 = ad.getReal(pos);<a name="line.1337"></a>
<span class="sourceLineNo">1338</span>                                                        final double i1 = ad.getImag(pos);<a name="line.1338"></a>
<span class="sourceLineNo">1339</span>                                                        if (ignoreNaNs &amp;&amp; (Double.isNaN(r1) || Double.isNaN(i1))) {<a name="line.1339"></a>
<span class="sourceLineNo">1340</span>                                                                continue;<a name="line.1340"></a>
<span class="sourceLineNo">1341</span>                                                        }<a name="line.1341"></a>
<span class="sourceLineNo">1342</span>                                                        if (ignoreInfs  &amp;&amp; (Double.isInfinite(r1) || Double.isInfinite(i1))) {<a name="line.1342"></a>
<span class="sourceLineNo">1343</span>                                                                continue;<a name="line.1343"></a>
<span class="sourceLineNo">1344</span>                                                        }<a name="line.1344"></a>
<span class="sourceLineNo">1345</span>                                                        final double tv = r1*rv - i1*iv;<a name="line.1345"></a>
<span class="sourceLineNo">1346</span>                                                        iv = r1*iv + i1*rv;<a name="line.1346"></a>
<span class="sourceLineNo">1347</span>                                                        rv = tv;<a name="line.1347"></a>
<span class="sourceLineNo">1348</span>                                                }<a name="line.1348"></a>
<span class="sourceLineNo">1349</span>                                                rd.set(rv, iv, pos);<a name="line.1349"></a>
<span class="sourceLineNo">1350</span>                                        }<a name="line.1350"></a>
<span class="sourceLineNo">1351</span>                                        break;<a name="line.1351"></a>
<span class="sourceLineNo">1352</span>                                }<a name="line.1352"></a>
<span class="sourceLineNo">1353</span>                        } else {<a name="line.1353"></a>
<span class="sourceLineNo">1354</span>                                final int is;<a name="line.1354"></a>
<span class="sourceLineNo">1355</span>                                final long[] lresults;<a name="line.1355"></a>
<span class="sourceLineNo">1356</span>                                final double[] dresults;<a name="line.1356"></a>
<span class="sourceLineNo">1357</span><a name="line.1357"></a>
<span class="sourceLineNo">1358</span>                                switch (dtype) {<a name="line.1358"></a>
<span class="sourceLineNo">1359</span>                                case Dataset.BOOL:<a name="line.1359"></a>
<span class="sourceLineNo">1360</span>                                case Dataset.INT8: case Dataset.INT16:<a name="line.1360"></a>
<span class="sourceLineNo">1361</span>                                case Dataset.INT32: case Dataset.INT64:<a name="line.1361"></a>
<span class="sourceLineNo">1362</span>                                        long lresult = 1;<a name="line.1362"></a>
<span class="sourceLineNo">1363</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.1363"></a>
<span class="sourceLineNo">1364</span>                                                pos[axis] = j;<a name="line.1364"></a>
<span class="sourceLineNo">1365</span>                                                lresult *= a.getInt(pos);<a name="line.1365"></a>
<span class="sourceLineNo">1366</span>                                                result.set(lresult, pos);<a name="line.1366"></a>
<span class="sourceLineNo">1367</span>                                        }<a name="line.1367"></a>
<span class="sourceLineNo">1368</span>                                        break;<a name="line.1368"></a>
<span class="sourceLineNo">1369</span>                                case Dataset.ARRAYINT8:<a name="line.1369"></a>
<span class="sourceLineNo">1370</span>                                        is = a.getElementsPerItem();<a name="line.1370"></a>
<span class="sourceLineNo">1371</span>                                        lresults = new long[is];<a name="line.1371"></a>
<span class="sourceLineNo">1372</span>                                        for (int k = 0; k &lt; is; k++) {<a name="line.1372"></a>
<span class="sourceLineNo">1373</span>                                                lresults[k] = 1;<a name="line.1373"></a>
<span class="sourceLineNo">1374</span>                                        }<a name="line.1374"></a>
<span class="sourceLineNo">1375</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.1375"></a>
<span class="sourceLineNo">1376</span>                                                pos[axis] = j;<a name="line.1376"></a>
<span class="sourceLineNo">1377</span>                                                final byte[] va = (byte[]) a.getObject(pos);<a name="line.1377"></a>
<span class="sourceLineNo">1378</span>                                                for (int k = 0; k &lt; is; k++) {<a name="line.1378"></a>
<span class="sourceLineNo">1379</span>                                                        lresults[k] *= va[k];<a name="line.1379"></a>
<span class="sourceLineNo">1380</span>                                                }<a name="line.1380"></a>
<span class="sourceLineNo">1381</span>                                                result.set(lresults, pos);<a name="line.1381"></a>
<span class="sourceLineNo">1382</span>                                        }<a name="line.1382"></a>
<span class="sourceLineNo">1383</span>                                        break;<a name="line.1383"></a>
<span class="sourceLineNo">1384</span>                                case Dataset.ARRAYINT16:<a name="line.1384"></a>
<span class="sourceLineNo">1385</span>                                        is = a.getElementsPerItem();<a name="line.1385"></a>
<span class="sourceLineNo">1386</span>                                        lresults = new long[is];<a name="line.1386"></a>
<span class="sourceLineNo">1387</span>                                        for (int k = 0; k &lt; is; k++) {<a name="line.1387"></a>
<span class="sourceLineNo">1388</span>                                                lresults[k] = 1;<a name="line.1388"></a>
<span class="sourceLineNo">1389</span>                                        }<a name="line.1389"></a>
<span class="sourceLineNo">1390</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.1390"></a>
<span class="sourceLineNo">1391</span>                                                pos[axis] = j;<a name="line.1391"></a>
<span class="sourceLineNo">1392</span>                                                final short[] va = (short[]) a.getObject(pos);<a name="line.1392"></a>
<span class="sourceLineNo">1393</span>                                                for (int k = 0; k &lt; is; k++) {<a name="line.1393"></a>
<span class="sourceLineNo">1394</span>                                                        lresults[k] *= va[k];<a name="line.1394"></a>
<span class="sourceLineNo">1395</span>                                                }<a name="line.1395"></a>
<span class="sourceLineNo">1396</span>                                                result.set(lresults, pos);<a name="line.1396"></a>
<span class="sourceLineNo">1397</span>                                        }<a name="line.1397"></a>
<span class="sourceLineNo">1398</span>                                        break;<a name="line.1398"></a>
<span class="sourceLineNo">1399</span>                                case Dataset.ARRAYINT32:<a name="line.1399"></a>
<span class="sourceLineNo">1400</span>                                        is = a.getElementsPerItem();<a name="line.1400"></a>
<span class="sourceLineNo">1401</span>                                        lresults = new long[is];<a name="line.1401"></a>
<span class="sourceLineNo">1402</span>                                        for (int k = 0; k &lt; is; k++) {<a name="line.1402"></a>
<span class="sourceLineNo">1403</span>                                                lresults[k] = 1;<a name="line.1403"></a>
<span class="sourceLineNo">1404</span>                                        }<a name="line.1404"></a>
<span class="sourceLineNo">1405</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.1405"></a>
<span class="sourceLineNo">1406</span>                                                pos[axis] = j;<a name="line.1406"></a>
<span class="sourceLineNo">1407</span>                                                final int[] va = (int[]) a.getObject(pos);<a name="line.1407"></a>
<span class="sourceLineNo">1408</span>                                                for (int k = 0; k &lt; is; k++) {<a name="line.1408"></a>
<span class="sourceLineNo">1409</span>                                                        lresults[k] *= va[k];<a name="line.1409"></a>
<span class="sourceLineNo">1410</span>                                                }<a name="line.1410"></a>
<span class="sourceLineNo">1411</span>                                                result.set(lresults, pos);<a name="line.1411"></a>
<span class="sourceLineNo">1412</span>                                        }<a name="line.1412"></a>
<span class="sourceLineNo">1413</span>                                        break;<a name="line.1413"></a>
<span class="sourceLineNo">1414</span>                                case Dataset.ARRAYINT64:<a name="line.1414"></a>
<span class="sourceLineNo">1415</span>                                        is = a.getElementsPerItem();<a name="line.1415"></a>
<span class="sourceLineNo">1416</span>                                        lresults = new long[is];<a name="line.1416"></a>
<span class="sourceLineNo">1417</span>                                        for (int k = 0; k &lt; is; k++) {<a name="line.1417"></a>
<span class="sourceLineNo">1418</span>                                                lresults[k] = 1;<a name="line.1418"></a>
<span class="sourceLineNo">1419</span>                                        }<a name="line.1419"></a>
<span class="sourceLineNo">1420</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.1420"></a>
<span class="sourceLineNo">1421</span>                                                pos[axis] = j;<a name="line.1421"></a>
<span class="sourceLineNo">1422</span>                                                final long[] va = (long[]) a.getObject(pos);<a name="line.1422"></a>
<span class="sourceLineNo">1423</span>                                                for (int k = 0; k &lt; is; k++) {<a name="line.1423"></a>
<span class="sourceLineNo">1424</span>                                                        lresults[k] *= va[k];<a name="line.1424"></a>
<span class="sourceLineNo">1425</span>                                                }<a name="line.1425"></a>
<span class="sourceLineNo">1426</span>                                                result.set(lresults, pos);<a name="line.1426"></a>
<span class="sourceLineNo">1427</span>                                        }<a name="line.1427"></a>
<span class="sourceLineNo">1428</span>                                        break;<a name="line.1428"></a>
<span class="sourceLineNo">1429</span>                                case Dataset.FLOAT32: case Dataset.FLOAT64:<a name="line.1429"></a>
<span class="sourceLineNo">1430</span>                                        double dresult = 1.;<a name="line.1430"></a>
<span class="sourceLineNo">1431</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.1431"></a>
<span class="sourceLineNo">1432</span>                                                if (!Double.isNaN(dresult)) {<a name="line.1432"></a>
<span class="sourceLineNo">1433</span>                                                        pos[axis] = j;<a name="line.1433"></a>
<span class="sourceLineNo">1434</span>                                                        final double x = a.getDouble(pos);<a name="line.1434"></a>
<span class="sourceLineNo">1435</span>                                                        if (ignoreNaNs &amp;&amp; Double.isNaN(x)) {<a name="line.1435"></a>
<span class="sourceLineNo">1436</span>                                                                continue;<a name="line.1436"></a>
<span class="sourceLineNo">1437</span>                                                        }<a name="line.1437"></a>
<span class="sourceLineNo">1438</span>                                                        if (ignoreInfs &amp;&amp; Double.isInfinite(x)) {<a name="line.1438"></a>
<span class="sourceLineNo">1439</span>                                                                continue;<a name="line.1439"></a>
<span class="sourceLineNo">1440</span>                                                        }<a name="line.1440"></a>
<span class="sourceLineNo">1441</span>                                                        dresult *= x;<a name="line.1441"></a>
<span class="sourceLineNo">1442</span>                                                }<a name="line.1442"></a>
<span class="sourceLineNo">1443</span>                                                result.set(dresult, pos);<a name="line.1443"></a>
<span class="sourceLineNo">1444</span>                                        }<a name="line.1444"></a>
<span class="sourceLineNo">1445</span>                                        break;<a name="line.1445"></a>
<span class="sourceLineNo">1446</span>                                case Dataset.ARRAYFLOAT32: case Dataset.ARRAYFLOAT64:<a name="line.1446"></a>
<span class="sourceLineNo">1447</span>                                        is = a.getElementsPerItem();<a name="line.1447"></a>
<span class="sourceLineNo">1448</span>                                        CompoundDataset da = (CompoundDataset) a;<a name="line.1448"></a>
<span class="sourceLineNo">1449</span>                                        double[] dvalues = new double[is];<a name="line.1449"></a>
<span class="sourceLineNo">1450</span>                                        dresults = new double[is];<a name="line.1450"></a>
<span class="sourceLineNo">1451</span>                                        for (int k = 0; k &lt; is; k++) {<a name="line.1451"></a>
<span class="sourceLineNo">1452</span>                                                dresults[k] = 1.;<a name="line.1452"></a>
<span class="sourceLineNo">1453</span>                                        }<a name="line.1453"></a>
<span class="sourceLineNo">1454</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.1454"></a>
<span class="sourceLineNo">1455</span>                                                pos[axis] = j;<a name="line.1455"></a>
<span class="sourceLineNo">1456</span>                                                da.getDoubleArray(dvalues, pos);<a name="line.1456"></a>
<span class="sourceLineNo">1457</span>                                                boolean okay = true;<a name="line.1457"></a>
<span class="sourceLineNo">1458</span>                                                for (int k = 0; k &lt; is; k++) {<a name="line.1458"></a>
<span class="sourceLineNo">1459</span>                                                        final double val = dvalues[k];<a name="line.1459"></a>
<span class="sourceLineNo">1460</span>                                                        if (ignoreNaNs &amp;&amp; Double.isNaN(val)) {<a name="line.1460"></a>
<span class="sourceLineNo">1461</span>                                                                okay = false;<a name="line.1461"></a>
<span class="sourceLineNo">1462</span>                                                                break;<a name="line.1462"></a>
<span class="sourceLineNo">1463</span>                                                        }<a name="line.1463"></a>
<span class="sourceLineNo">1464</span>                                                        if (ignoreInfs &amp;&amp; Double.isInfinite(val)) {<a name="line.1464"></a>
<span class="sourceLineNo">1465</span>                                                                okay = false;<a name="line.1465"></a>
<span class="sourceLineNo">1466</span>                                                                break;<a name="line.1466"></a>
<span class="sourceLineNo">1467</span>                                                        }<a name="line.1467"></a>
<span class="sourceLineNo">1468</span>                                                }<a name="line.1468"></a>
<span class="sourceLineNo">1469</span>                                                if (okay) {<a name="line.1469"></a>
<span class="sourceLineNo">1470</span>                                                        for (int k = 0; k &lt; is; k++) {<a name="line.1470"></a>
<span class="sourceLineNo">1471</span>                                                                dresults[k] *= dvalues[k];<a name="line.1471"></a>
<span class="sourceLineNo">1472</span>                                                        }<a name="line.1472"></a>
<span class="sourceLineNo">1473</span>                                                }<a name="line.1473"></a>
<span class="sourceLineNo">1474</span>                                                result.set(dresults, pos);<a name="line.1474"></a>
<span class="sourceLineNo">1475</span>                                        }<a name="line.1475"></a>
<span class="sourceLineNo">1476</span>                                        break;<a name="line.1476"></a>
<span class="sourceLineNo">1477</span>                                }<a name="line.1477"></a>
<span class="sourceLineNo">1478</span>                        }<a name="line.1478"></a>
<span class="sourceLineNo">1479</span>                }<a name="line.1479"></a>
<span class="sourceLineNo">1480</span><a name="line.1480"></a>
<span class="sourceLineNo">1481</span>                return result;<a name="line.1481"></a>
<span class="sourceLineNo">1482</span>        }<a name="line.1482"></a>
<span class="sourceLineNo">1483</span><a name="line.1483"></a>
<span class="sourceLineNo">1484</span>        /**<a name="line.1484"></a>
<span class="sourceLineNo">1485</span>         * @param a dataset<a name="line.1485"></a>
<span class="sourceLineNo">1486</span>         * @param ignoreInvalids see {@link IDataset#max(boolean...)}<a name="line.1486"></a>
<span class="sourceLineNo">1487</span>         * @return cumulative sum of items in flattened dataset<a name="line.1487"></a>
<span class="sourceLineNo">1488</span>         * @since 2.0<a name="line.1488"></a>
<span class="sourceLineNo">1489</span>         */<a name="line.1489"></a>
<span class="sourceLineNo">1490</span>        public static Dataset cumulativeSum(final Dataset a, final boolean... ignoreInvalids) {<a name="line.1490"></a>
<span class="sourceLineNo">1491</span>                return cumulativeSum(a.flatten(), 0, ignoreInvalids);<a name="line.1491"></a>
<span class="sourceLineNo">1492</span>        }<a name="line.1492"></a>
<span class="sourceLineNo">1493</span><a name="line.1493"></a>
<span class="sourceLineNo">1494</span>        /**<a name="line.1494"></a>
<span class="sourceLineNo">1495</span>         * @param a dataset<a name="line.1495"></a>
<span class="sourceLineNo">1496</span>         * @param axis<a name="line.1496"></a>
<span class="sourceLineNo">1497</span>         * @param ignoreInvalids see {@link Dataset#max(int, boolean...)}<a name="line.1497"></a>
<span class="sourceLineNo">1498</span>         * @return cumulative sum of items along axis in dataset<a name="line.1498"></a>
<span class="sourceLineNo">1499</span>         * @since 2.0<a name="line.1499"></a>
<span class="sourceLineNo">1500</span>         */<a name="line.1500"></a>
<span class="sourceLineNo">1501</span>        public static Dataset cumulativeSum(final Dataset a, int axis, final boolean... ignoreInvalids) {<a name="line.1501"></a>
<span class="sourceLineNo">1502</span>                axis = a.checkAxis(axis);<a name="line.1502"></a>
<span class="sourceLineNo">1503</span>                int dtype = a.getDType();<a name="line.1503"></a>
<span class="sourceLineNo">1504</span>                int[] oshape = a.getShape();<a name="line.1504"></a>
<span class="sourceLineNo">1505</span>                int alen = oshape[axis];<a name="line.1505"></a>
<span class="sourceLineNo">1506</span>                oshape[axis] = 1;<a name="line.1506"></a>
<span class="sourceLineNo">1507</span><a name="line.1507"></a>
<span class="sourceLineNo">1508</span>                final boolean ignoreNaNs;<a name="line.1508"></a>
<span class="sourceLineNo">1509</span>                final boolean ignoreInfs;<a name="line.1509"></a>
<span class="sourceLineNo">1510</span>                if (a.hasFloatingPointElements()) {<a name="line.1510"></a>
<span class="sourceLineNo">1511</span>                        ignoreNaNs = ignoreInvalids != null &amp;&amp; ignoreInvalids.length &gt; 0 ? ignoreInvalids[0] : false;<a name="line.1511"></a>
<span class="sourceLineNo">1512</span>                        ignoreInfs = ignoreInvalids != null &amp;&amp; ignoreInvalids.length &gt; 1 ? ignoreInvalids[1] : ignoreNaNs;<a name="line.1512"></a>
<span class="sourceLineNo">1513</span>                } else {<a name="line.1513"></a>
<span class="sourceLineNo">1514</span>                        ignoreNaNs = false;<a name="line.1514"></a>
<span class="sourceLineNo">1515</span>                        ignoreInfs = false;<a name="line.1515"></a>
<span class="sourceLineNo">1516</span>                }<a name="line.1516"></a>
<span class="sourceLineNo">1517</span>                Dataset result = DatasetFactory.zeros(a);<a name="line.1517"></a>
<span class="sourceLineNo">1518</span>                PositionIterator pi = result.getPositionIterator(axis);<a name="line.1518"></a>
<span class="sourceLineNo">1519</span><a name="line.1519"></a>
<span class="sourceLineNo">1520</span>                int[] pos = pi.getPos();<a name="line.1520"></a>
<span class="sourceLineNo">1521</span><a name="line.1521"></a>
<span class="sourceLineNo">1522</span>                while (pi.hasNext()) {<a name="line.1522"></a>
<span class="sourceLineNo">1523</span><a name="line.1523"></a>
<span class="sourceLineNo">1524</span>                        if (a.isComplex()) {<a name="line.1524"></a>
<span class="sourceLineNo">1525</span>                                double rv = 0, iv = 0;<a name="line.1525"></a>
<span class="sourceLineNo">1526</span>                                switch (dtype) {<a name="line.1526"></a>
<span class="sourceLineNo">1527</span>                                case Dataset.COMPLEX64:<a name="line.1527"></a>
<span class="sourceLineNo">1528</span>                                        ComplexFloatDataset af = (ComplexFloatDataset) a;<a name="line.1528"></a>
<span class="sourceLineNo">1529</span>                                        ComplexFloatDataset rf = (ComplexFloatDataset) result;<a name="line.1529"></a>
<span class="sourceLineNo">1530</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.1530"></a>
<span class="sourceLineNo">1531</span>                                                if (!Double.isNaN(rv) || !Double.isNaN(iv)) {<a name="line.1531"></a>
<span class="sourceLineNo">1532</span>                                                        pos[axis] = j;<a name="line.1532"></a>
<span class="sourceLineNo">1533</span>                                                        final float r1 = af.getReal(pos);<a name="line.1533"></a>
<span class="sourceLineNo">1534</span>                                                        final float i1 = af.getImag(pos);<a name="line.1534"></a>
<span class="sourceLineNo">1535</span>                                                        if (ignoreNaNs &amp;&amp; (Float.isNaN(r1) || Float.isNaN(i1))) {<a name="line.1535"></a>
<span class="sourceLineNo">1536</span>                                                                continue;<a name="line.1536"></a>
<span class="sourceLineNo">1537</span>                                                        }<a name="line.1537"></a>
<span class="sourceLineNo">1538</span>                                                        if (ignoreInfs  &amp;&amp; (Float.isInfinite(r1) || Float.isInfinite(i1))) {<a name="line.1538"></a>
<span class="sourceLineNo">1539</span>                                                                continue;<a name="line.1539"></a>
<span class="sourceLineNo">1540</span>                                                        }<a name="line.1540"></a>
<span class="sourceLineNo">1541</span>                                                        rv += r1;<a name="line.1541"></a>
<span class="sourceLineNo">1542</span>                                                        iv += i1;<a name="line.1542"></a>
<span class="sourceLineNo">1543</span>                                                }<a name="line.1543"></a>
<span class="sourceLineNo">1544</span>                                                rf.set((float) rv, (float) iv, pos);<a name="line.1544"></a>
<span class="sourceLineNo">1545</span>                                        }<a name="line.1545"></a>
<span class="sourceLineNo">1546</span>                                        break;<a name="line.1546"></a>
<span class="sourceLineNo">1547</span>                                case Dataset.COMPLEX128:<a name="line.1547"></a>
<span class="sourceLineNo">1548</span>                                        ComplexDoubleDataset ad = (ComplexDoubleDataset) a;<a name="line.1548"></a>
<span class="sourceLineNo">1549</span>                                        ComplexDoubleDataset rd = (ComplexDoubleDataset) result;<a name="line.1549"></a>
<span class="sourceLineNo">1550</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.1550"></a>
<span class="sourceLineNo">1551</span>                                                if (!Double.isNaN(rv) || !Double.isNaN(iv)) {<a name="line.1551"></a>
<span class="sourceLineNo">1552</span>                                                        pos[axis] = j;<a name="line.1552"></a>
<span class="sourceLineNo">1553</span>                                                        final double r1 = ad.getReal(pos);<a name="line.1553"></a>
<span class="sourceLineNo">1554</span>                                                        final double i1 = ad.getImag(pos);<a name="line.1554"></a>
<span class="sourceLineNo">1555</span>                                                        if (ignoreNaNs &amp;&amp; (Double.isNaN(r1) || Double.isNaN(i1))) {<a name="line.1555"></a>
<span class="sourceLineNo">1556</span>                                                                continue;<a name="line.1556"></a>
<span class="sourceLineNo">1557</span>                                                        }<a name="line.1557"></a>
<span class="sourceLineNo">1558</span>                                                        if (ignoreInfs  &amp;&amp; (Double.isInfinite(r1) || Double.isInfinite(i1))) {<a name="line.1558"></a>
<span class="sourceLineNo">1559</span>                                                                continue;<a name="line.1559"></a>
<span class="sourceLineNo">1560</span>                                                        }<a name="line.1560"></a>
<span class="sourceLineNo">1561</span>                                                        rv += r1;<a name="line.1561"></a>
<span class="sourceLineNo">1562</span>                                                        iv += i1;<a name="line.1562"></a>
<span class="sourceLineNo">1563</span>                                                }<a name="line.1563"></a>
<span class="sourceLineNo">1564</span>                                                rd.set(rv, iv, pos);<a name="line.1564"></a>
<span class="sourceLineNo">1565</span>                                        }<a name="line.1565"></a>
<span class="sourceLineNo">1566</span>                                        break;<a name="line.1566"></a>
<span class="sourceLineNo">1567</span>                                }<a name="line.1567"></a>
<span class="sourceLineNo">1568</span>                        } else {<a name="line.1568"></a>
<span class="sourceLineNo">1569</span>                                final int is;<a name="line.1569"></a>
<span class="sourceLineNo">1570</span>                                final long[] lresults;<a name="line.1570"></a>
<span class="sourceLineNo">1571</span>                                final double[] dresults;<a name="line.1571"></a>
<span class="sourceLineNo">1572</span><a name="line.1572"></a>
<span class="sourceLineNo">1573</span>                                switch (dtype) {<a name="line.1573"></a>
<span class="sourceLineNo">1574</span>                                case Dataset.BOOL:<a name="line.1574"></a>
<span class="sourceLineNo">1575</span>                                case Dataset.INT8: case Dataset.INT16:<a name="line.1575"></a>
<span class="sourceLineNo">1576</span>                                case Dataset.INT32: case Dataset.INT64:<a name="line.1576"></a>
<span class="sourceLineNo">1577</span>                                        long lresult = 0;<a name="line.1577"></a>
<span class="sourceLineNo">1578</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.1578"></a>
<span class="sourceLineNo">1579</span>                                                pos[axis] = j;<a name="line.1579"></a>
<span class="sourceLineNo">1580</span>                                                lresult += a.getInt(pos);<a name="line.1580"></a>
<span class="sourceLineNo">1581</span>                                                result.set(lresult, pos);<a name="line.1581"></a>
<span class="sourceLineNo">1582</span>                                        }<a name="line.1582"></a>
<span class="sourceLineNo">1583</span>                                        break;<a name="line.1583"></a>
<span class="sourceLineNo">1584</span>                                case Dataset.ARRAYINT8:<a name="line.1584"></a>
<span class="sourceLineNo">1585</span>                                        is = a.getElementsPerItem();<a name="line.1585"></a>
<span class="sourceLineNo">1586</span>                                        lresults = new long[is];<a name="line.1586"></a>
<span class="sourceLineNo">1587</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.1587"></a>
<span class="sourceLineNo">1588</span>                                                pos[axis] = j;<a name="line.1588"></a>
<span class="sourceLineNo">1589</span>                                                final byte[] va = (byte[]) a.getObject(pos);<a name="line.1589"></a>
<span class="sourceLineNo">1590</span>                                                for (int k = 0; k &lt; is; k++) {<a name="line.1590"></a>
<span class="sourceLineNo">1591</span>                                                        lresults[k] += va[k];<a name="line.1591"></a>
<span class="sourceLineNo">1592</span>                                                }<a name="line.1592"></a>
<span class="sourceLineNo">1593</span>                                                result.set(lresults, pos);<a name="line.1593"></a>
<span class="sourceLineNo">1594</span>                                        }<a name="line.1594"></a>
<span class="sourceLineNo">1595</span>                                        break;<a name="line.1595"></a>
<span class="sourceLineNo">1596</span>                                case Dataset.ARRAYINT16:<a name="line.1596"></a>
<span class="sourceLineNo">1597</span>                                        is = a.getElementsPerItem();<a name="line.1597"></a>
<span class="sourceLineNo">1598</span>                                        lresults = new long[is];<a name="line.1598"></a>
<span class="sourceLineNo">1599</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.1599"></a>
<span class="sourceLineNo">1600</span>                                                pos[axis] = j;<a name="line.1600"></a>
<span class="sourceLineNo">1601</span>                                                final short[] va = (short[]) a.getObject(pos);<a name="line.1601"></a>
<span class="sourceLineNo">1602</span>                                                for (int k = 0; k &lt; is; k++) {<a name="line.1602"></a>
<span class="sourceLineNo">1603</span>                                                        lresults[k] += va[k];<a name="line.1603"></a>
<span class="sourceLineNo">1604</span>                                                }<a name="line.1604"></a>
<span class="sourceLineNo">1605</span>                                                result.set(lresults, pos);<a name="line.1605"></a>
<span class="sourceLineNo">1606</span>                                        }<a name="line.1606"></a>
<span class="sourceLineNo">1607</span>                                        break;<a name="line.1607"></a>
<span class="sourceLineNo">1608</span>                                case Dataset.ARRAYINT32:<a name="line.1608"></a>
<span class="sourceLineNo">1609</span>                                        is = a.getElementsPerItem();<a name="line.1609"></a>
<span class="sourceLineNo">1610</span>                                        lresults = new long[is];<a name="line.1610"></a>
<span class="sourceLineNo">1611</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.1611"></a>
<span class="sourceLineNo">1612</span>                                                pos[axis] = j;<a name="line.1612"></a>
<span class="sourceLineNo">1613</span>                                                final int[] va = (int[]) a.getObject(pos);<a name="line.1613"></a>
<span class="sourceLineNo">1614</span>                                                for (int k = 0; k &lt; is; k++) {<a name="line.1614"></a>
<span class="sourceLineNo">1615</span>                                                        lresults[k] += va[k];<a name="line.1615"></a>
<span class="sourceLineNo">1616</span>                                                }<a name="line.1616"></a>
<span class="sourceLineNo">1617</span>                                                result.set(lresults, pos);<a name="line.1617"></a>
<span class="sourceLineNo">1618</span>                                        }<a name="line.1618"></a>
<span class="sourceLineNo">1619</span>                                        break;<a name="line.1619"></a>
<span class="sourceLineNo">1620</span>                                case Dataset.ARRAYINT64:<a name="line.1620"></a>
<span class="sourceLineNo">1621</span>                                        is = a.getElementsPerItem();<a name="line.1621"></a>
<span class="sourceLineNo">1622</span>                                        lresults = new long[is];<a name="line.1622"></a>
<span class="sourceLineNo">1623</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.1623"></a>
<span class="sourceLineNo">1624</span>                                                pos[axis] = j;<a name="line.1624"></a>
<span class="sourceLineNo">1625</span>                                                final long[] va = (long[]) a.getObject(pos);<a name="line.1625"></a>
<span class="sourceLineNo">1626</span>                                                for (int k = 0; k &lt; is; k++) {<a name="line.1626"></a>
<span class="sourceLineNo">1627</span>                                                        lresults[k] += va[k];<a name="line.1627"></a>
<span class="sourceLineNo">1628</span>                                                }<a name="line.1628"></a>
<span class="sourceLineNo">1629</span>                                                result.set(lresults, pos);<a name="line.1629"></a>
<span class="sourceLineNo">1630</span>                                        }<a name="line.1630"></a>
<span class="sourceLineNo">1631</span>                                        break;<a name="line.1631"></a>
<span class="sourceLineNo">1632</span>                                case Dataset.FLOAT32: case Dataset.FLOAT64:<a name="line.1632"></a>
<span class="sourceLineNo">1633</span>                                        double dresult = 0.;<a name="line.1633"></a>
<span class="sourceLineNo">1634</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.1634"></a>
<span class="sourceLineNo">1635</span>                                                if (!Double.isNaN(dresult)) {<a name="line.1635"></a>
<span class="sourceLineNo">1636</span>                                                        pos[axis] = j;<a name="line.1636"></a>
<span class="sourceLineNo">1637</span>                                                        final double x = a.getDouble(pos);<a name="line.1637"></a>
<span class="sourceLineNo">1638</span>                                                        if (ignoreNaNs &amp;&amp; Double.isNaN(x)) {<a name="line.1638"></a>
<span class="sourceLineNo">1639</span>                                                                continue;<a name="line.1639"></a>
<span class="sourceLineNo">1640</span>                                                        }<a name="line.1640"></a>
<span class="sourceLineNo">1641</span>                                                        if (ignoreInfs &amp;&amp; Double.isInfinite(x)) {<a name="line.1641"></a>
<span class="sourceLineNo">1642</span>                                                                continue;<a name="line.1642"></a>
<span class="sourceLineNo">1643</span>                                                        }<a name="line.1643"></a>
<span class="sourceLineNo">1644</span>                                                        dresult += x;<a name="line.1644"></a>
<span class="sourceLineNo">1645</span>                                                }<a name="line.1645"></a>
<span class="sourceLineNo">1646</span>                                                result.set(dresult, pos);<a name="line.1646"></a>
<span class="sourceLineNo">1647</span>                                        }<a name="line.1647"></a>
<span class="sourceLineNo">1648</span>                                        break;<a name="line.1648"></a>
<span class="sourceLineNo">1649</span>                                case Dataset.ARRAYFLOAT32: case Dataset.ARRAYFLOAT64:<a name="line.1649"></a>
<span class="sourceLineNo">1650</span>                                        is = a.getElementsPerItem();<a name="line.1650"></a>
<span class="sourceLineNo">1651</span>                                        CompoundDataset da = (CompoundDataset) a;<a name="line.1651"></a>
<span class="sourceLineNo">1652</span>                                        double[] dvalues = new double[is];<a name="line.1652"></a>
<span class="sourceLineNo">1653</span>                                        dresults = new double[is];<a name="line.1653"></a>
<span class="sourceLineNo">1654</span>                                        for (int j = 0; j &lt; alen; j++) {<a name="line.1654"></a>
<span class="sourceLineNo">1655</span>                                                pos[axis] = j;<a name="line.1655"></a>
<span class="sourceLineNo">1656</span>                                                da.getDoubleArray(dvalues, pos);<a name="line.1656"></a>
<span class="sourceLineNo">1657</span>                                                boolean okay = true;<a name="line.1657"></a>
<span class="sourceLineNo">1658</span>                                                for (int k = 0; k &lt; is; k++) {<a name="line.1658"></a>
<span class="sourceLineNo">1659</span>                                                        final double val = dvalues[k];<a name="line.1659"></a>
<span class="sourceLineNo">1660</span>                                                        if (ignoreNaNs &amp;&amp; Double.isNaN(val)) {<a name="line.1660"></a>
<span class="sourceLineNo">1661</span>                                                                okay = false;<a name="line.1661"></a>
<span class="sourceLineNo">1662</span>                                                                break;<a name="line.1662"></a>
<span class="sourceLineNo">1663</span>                                                        }<a name="line.1663"></a>
<span class="sourceLineNo">1664</span>                                                        if (ignoreInfs &amp;&amp; Double.isInfinite(val)) {<a name="line.1664"></a>
<span class="sourceLineNo">1665</span>                                                                okay = false;<a name="line.1665"></a>
<span class="sourceLineNo">1666</span>                                                                break;<a name="line.1666"></a>
<span class="sourceLineNo">1667</span>                                                        }<a name="line.1667"></a>
<span class="sourceLineNo">1668</span>                                                }<a name="line.1668"></a>
<span class="sourceLineNo">1669</span>                                                if (okay) {<a name="line.1669"></a>
<span class="sourceLineNo">1670</span>                                                        for (int k = 0; k &lt; is; k++) {<a name="line.1670"></a>
<span class="sourceLineNo">1671</span>                                                                dresults[k] += dvalues[k];<a name="line.1671"></a>
<span class="sourceLineNo">1672</span>                                                        }<a name="line.1672"></a>
<span class="sourceLineNo">1673</span>                                                }<a name="line.1673"></a>
<span class="sourceLineNo">1674</span>                                                result.set(dresults, pos);<a name="line.1674"></a>
<span class="sourceLineNo">1675</span>                                        }<a name="line.1675"></a>
<span class="sourceLineNo">1676</span>                                        break;<a name="line.1676"></a>
<span class="sourceLineNo">1677</span>                                }<a name="line.1677"></a>
<span class="sourceLineNo">1678</span>                        }<a name="line.1678"></a>
<span class="sourceLineNo">1679</span>                }<a name="line.1679"></a>
<span class="sourceLineNo">1680</span><a name="line.1680"></a>
<span class="sourceLineNo">1681</span>                return result;<a name="line.1681"></a>
<span class="sourceLineNo">1682</span>        }<a name="line.1682"></a>
<span class="sourceLineNo">1683</span><a name="line.1683"></a>
<span class="sourceLineNo">1684</span>        /**<a name="line.1684"></a>
<span class="sourceLineNo">1685</span>         * @param a<a name="line.1685"></a>
<span class="sourceLineNo">1686</span>         * @return average deviation value of all items the dataset<a name="line.1686"></a>
<span class="sourceLineNo">1687</span>         */<a name="line.1687"></a>
<span class="sourceLineNo">1688</span>        public static Object averageDeviation(final Dataset a) {<a name="line.1688"></a>
<span class="sourceLineNo">1689</span>                final IndexIterator it = a.getIterator();<a name="line.1689"></a>
<span class="sourceLineNo">1690</span>                final int is = a.getElementsPerItem();<a name="line.1690"></a>
<span class="sourceLineNo">1691</span><a name="line.1691"></a>
<span class="sourceLineNo">1692</span>                if (is == 1) {<a name="line.1692"></a>
<span class="sourceLineNo">1693</span>                        double mean = (Double) a.mean();<a name="line.1693"></a>
<span class="sourceLineNo">1694</span>                        double sum = 0.0;<a name="line.1694"></a>
<span class="sourceLineNo">1695</span><a name="line.1695"></a>
<span class="sourceLineNo">1696</span>                        while (it.hasNext()) {<a name="line.1696"></a>
<span class="sourceLineNo">1697</span>                                sum += Math.abs(a.getElementDoubleAbs(it.index) - mean);<a name="line.1697"></a>
<span class="sourceLineNo">1698</span>                        }<a name="line.1698"></a>
<span class="sourceLineNo">1699</span><a name="line.1699"></a>
<span class="sourceLineNo">1700</span>                        return sum / a.getSize();<a name="line.1700"></a>
<span class="sourceLineNo">1701</span>                }<a name="line.1701"></a>
<span class="sourceLineNo">1702</span><a name="line.1702"></a>
<span class="sourceLineNo">1703</span>                double[] means = (double[]) a.mean();<a name="line.1703"></a>
<span class="sourceLineNo">1704</span>                double[] sums = new double[is];<a name="line.1704"></a>
<span class="sourceLineNo">1705</span><a name="line.1705"></a>
<span class="sourceLineNo">1706</span>                while (it.hasNext()) {<a name="line.1706"></a>
<span class="sourceLineNo">1707</span>                        for (int j = 0; j &lt; is; j++)<a name="line.1707"></a>
<span class="sourceLineNo">1708</span>                                sums[j] += Math.abs(a.getElementDoubleAbs(it.index + j) - means[j]);<a name="line.1708"></a>
<span class="sourceLineNo">1709</span>                }<a name="line.1709"></a>
<span class="sourceLineNo">1710</span><a name="line.1710"></a>
<span class="sourceLineNo">1711</span>                double n = a.getSize();<a name="line.1711"></a>
<span class="sourceLineNo">1712</span>                for (int j = 0; j &lt; is; j++)<a name="line.1712"></a>
<span class="sourceLineNo">1713</span>                        sums[j] /= n;<a name="line.1713"></a>
<span class="sourceLineNo">1714</span><a name="line.1714"></a>
<span class="sourceLineNo">1715</span>                return sums;<a name="line.1715"></a>
<span class="sourceLineNo">1716</span>        }<a name="line.1716"></a>
<span class="sourceLineNo">1717</span><a name="line.1717"></a>
<span class="sourceLineNo">1718</span>        /**<a name="line.1718"></a>
<span class="sourceLineNo">1719</span>         * The residual is the sum of squared differences<a name="line.1719"></a>
<span class="sourceLineNo">1720</span>         * @param a<a name="line.1720"></a>
<span class="sourceLineNo">1721</span>         * @param b<a name="line.1721"></a>
<span class="sourceLineNo">1722</span>         * @return residual value<a name="line.1722"></a>
<span class="sourceLineNo">1723</span>         */<a name="line.1723"></a>
<span class="sourceLineNo">1724</span>        public static double residual(final Dataset a, final Dataset b) {<a name="line.1724"></a>
<span class="sourceLineNo">1725</span>                return a.residual(b);<a name="line.1725"></a>
<span class="sourceLineNo">1726</span>        }<a name="line.1726"></a>
<span class="sourceLineNo">1727</span><a name="line.1727"></a>
<span class="sourceLineNo">1728</span>        /**<a name="line.1728"></a>
<span class="sourceLineNo">1729</span>         * The residual is the sum of squared differences<a name="line.1729"></a>
<span class="sourceLineNo">1730</span>         * @param a<a name="line.1730"></a>
<span class="sourceLineNo">1731</span>         * @param b<a name="line.1731"></a>
<span class="sourceLineNo">1732</span>         * @param w<a name="line.1732"></a>
<span class="sourceLineNo">1733</span>         * @return residual value<a name="line.1733"></a>
<span class="sourceLineNo">1734</span>         */<a name="line.1734"></a>
<span class="sourceLineNo">1735</span>        public static double weightedResidual(final Dataset a, final Dataset b, final Dataset w) {<a name="line.1735"></a>
<span class="sourceLineNo">1736</span>                return a.residual(b, w, false);<a name="line.1736"></a>
<span class="sourceLineNo">1737</span>        }<a name="line.1737"></a>
<span class="sourceLineNo">1738</span><a name="line.1738"></a>
<span class="sourceLineNo">1739</span>        /**<a name="line.1739"></a>
<span class="sourceLineNo">1740</span>         * Calculate approximate outlier values. These are defined as the values in the dataset<a name="line.1740"></a>
<span class="sourceLineNo">1741</span>         * that are approximately below and above the given thresholds - in terms of percentages<a name="line.1741"></a>
<span class="sourceLineNo">1742</span>         * of dataset size.<a name="line.1742"></a>
<span class="sourceLineNo">1743</span>         * &lt;p&gt;<a name="line.1743"></a>
<span class="sourceLineNo">1744</span>         * It approximates by limiting the number of items (given by length) used internally by<a name="line.1744"></a>
<span class="sourceLineNo">1745</span>         * data structures - the larger this is, the more accurate will those outlier values become.<a name="line.1745"></a>
<span class="sourceLineNo">1746</span>         * The actual thresholds used are returned in the array.<a name="line.1746"></a>
<span class="sourceLineNo">1747</span>         * &lt;p&gt;<a name="line.1747"></a>
<span class="sourceLineNo">1748</span>         * Also, the low and high values will be made distinct if possible by adjusting the thresholds<a name="line.1748"></a>
<span class="sourceLineNo">1749</span>         * @param a<a name="line.1749"></a>
<span class="sourceLineNo">1750</span>         * @param lo percentage threshold for lower limit<a name="line.1750"></a>
<span class="sourceLineNo">1751</span>         * @param hi percentage threshold for higher limit<a name="line.1751"></a>
<span class="sourceLineNo">1752</span>         * @param length maximum number of items used internally, if negative, then unlimited<a name="line.1752"></a>
<span class="sourceLineNo">1753</span>         * @return double array with low and high values, and low and high percentage thresholds<a name="line.1753"></a>
<span class="sourceLineNo">1754</span>         */<a name="line.1754"></a>
<span class="sourceLineNo">1755</span>        public static double[] outlierValues(final Dataset a, double lo, double hi, final int length) {<a name="line.1755"></a>
<span class="sourceLineNo">1756</span>                return outlierValues(a, null, true, lo, hi, length);<a name="line.1756"></a>
<span class="sourceLineNo">1757</span>        }<a name="line.1757"></a>
<span class="sourceLineNo">1758</span><a name="line.1758"></a>
<span class="sourceLineNo">1759</span>        /**<a name="line.1759"></a>
<span class="sourceLineNo">1760</span>         * Calculate approximate outlier values. These are defined as the values in the dataset<a name="line.1760"></a>
<span class="sourceLineNo">1761</span>         * that are approximately below and above the given thresholds - in terms of percentages<a name="line.1761"></a>
<span class="sourceLineNo">1762</span>         * of dataset size.<a name="line.1762"></a>
<span class="sourceLineNo">1763</span>         * &lt;p&gt;<a name="line.1763"></a>
<span class="sourceLineNo">1764</span>         * It approximates by limiting the number of items (given by length) used internally by<a name="line.1764"></a>
<span class="sourceLineNo">1765</span>         * data structures - the larger this is, the more accurate will those outlier values become.<a name="line.1765"></a>
<span class="sourceLineNo">1766</span>         * The actual thresholds used are returned in the array.<a name="line.1766"></a>
<span class="sourceLineNo">1767</span>         * &lt;p&gt;<a name="line.1767"></a>
<span class="sourceLineNo">1768</span>         * Also, the low and high values will be made distinct if possible by adjusting the thresholds<a name="line.1768"></a>
<span class="sourceLineNo">1769</span>         * @param a<a name="line.1769"></a>
<span class="sourceLineNo">1770</span>         * @param mask can be null<a name="line.1770"></a>
<span class="sourceLineNo">1771</span>         * @param value value of mask to match to include for calculation<a name="line.1771"></a>
<span class="sourceLineNo">1772</span>         * @param lo percentage threshold for lower limit<a name="line.1772"></a>
<span class="sourceLineNo">1773</span>         * @param hi percentage threshold for higher limit<a name="line.1773"></a>
<span class="sourceLineNo">1774</span>         * @param length maximum number of items used internally, if negative, then unlimited<a name="line.1774"></a>
<span class="sourceLineNo">1775</span>         * @return double array with low and high values, and low and high percentage thresholds<a name="line.1775"></a>
<span class="sourceLineNo">1776</span>         * @since 2.1<a name="line.1776"></a>
<span class="sourceLineNo">1777</span>         */<a name="line.1777"></a>
<span class="sourceLineNo">1778</span>        public static double[] outlierValues(final Dataset a, final Dataset mask, final boolean value, double lo, double hi, final int length) {<a name="line.1778"></a>
<span class="sourceLineNo">1779</span>                if (lo &lt;= 0 || hi &lt;= 0 || lo &gt;= hi || hi &gt;= 100  || Double.isNaN(lo)|| Double.isNaN(hi)) {<a name="line.1779"></a>
<span class="sourceLineNo">1780</span>                        throw new IllegalArgumentException("Thresholds must be between (0,100) and in order");<a name="line.1780"></a>
<span class="sourceLineNo">1781</span>                }<a name="line.1781"></a>
<span class="sourceLineNo">1782</span>                final int size = a.getSize();<a name="line.1782"></a>
<span class="sourceLineNo">1783</span>                int nl = Math.max((int) ((lo*size)/100), 1);<a name="line.1783"></a>
<span class="sourceLineNo">1784</span>                if (length &gt; 0 &amp;&amp; nl &gt; length)<a name="line.1784"></a>
<span class="sourceLineNo">1785</span>                        nl = length;<a name="line.1785"></a>
<span class="sourceLineNo">1786</span>                int nh = Math.max((int) (((100-hi)*size)/100), 1);<a name="line.1786"></a>
<span class="sourceLineNo">1787</span>                if (length &gt; 0 &amp;&amp; nh &gt; length)<a name="line.1787"></a>
<span class="sourceLineNo">1788</span>                        nh = length;<a name="line.1788"></a>
<span class="sourceLineNo">1789</span><a name="line.1789"></a>
<span class="sourceLineNo">1790</span>                IndexIterator it = mask == null ? a.getIterator() : a.getBooleanIterator(mask, value);<a name="line.1790"></a>
<span class="sourceLineNo">1791</span>                double[] results = Math.max(nl, nh) &gt; 640 ? outlierValuesMap(a, it, nl, nh) : outlierValuesList(a, it, nl, nh);<a name="line.1791"></a>
<span class="sourceLineNo">1792</span><a name="line.1792"></a>
<span class="sourceLineNo">1793</span>                results[2] = results[2]*100./size;<a name="line.1793"></a>
<span class="sourceLineNo">1794</span>                results[3] = 100. - results[3]*100./size;<a name="line.1794"></a>
<span class="sourceLineNo">1795</span>                return results;<a name="line.1795"></a>
<span class="sourceLineNo">1796</span>        }<a name="line.1796"></a>
<span class="sourceLineNo">1797</span><a name="line.1797"></a>
<span class="sourceLineNo">1798</span>        static double[] outlierValuesMap(final Dataset a, final IndexIterator it, int nl, int nh) {<a name="line.1798"></a>
<span class="sourceLineNo">1799</span>                final TreeMap&lt;Double, Integer&gt; lMap = new TreeMap&lt;Double, Integer&gt;();<a name="line.1799"></a>
<span class="sourceLineNo">1800</span>                final TreeMap&lt;Double, Integer&gt; hMap = new TreeMap&lt;Double, Integer&gt;();<a name="line.1800"></a>
<span class="sourceLineNo">1801</span><a name="line.1801"></a>
<span class="sourceLineNo">1802</span>                int ml = 0;<a name="line.1802"></a>
<span class="sourceLineNo">1803</span>                int mh = 0;<a name="line.1803"></a>
<span class="sourceLineNo">1804</span>                while (it.hasNext()) {<a name="line.1804"></a>
<span class="sourceLineNo">1805</span>                        Double x = a.getElementDoubleAbs(it.index);<a name="line.1805"></a>
<span class="sourceLineNo">1806</span>                        if (Double.isNaN(x)) {<a name="line.1806"></a>
<span class="sourceLineNo">1807</span>                                continue;<a name="line.1807"></a>
<span class="sourceLineNo">1808</span>                        }<a name="line.1808"></a>
<span class="sourceLineNo">1809</span>                        Integer i;<a name="line.1809"></a>
<span class="sourceLineNo">1810</span>                        if (ml == nl) {<a name="line.1810"></a>
<span class="sourceLineNo">1811</span>                                Double k = lMap.lastKey();<a name="line.1811"></a>
<span class="sourceLineNo">1812</span>                                if (x &lt; k) {<a name="line.1812"></a>
<span class="sourceLineNo">1813</span>                                        i = lMap.get(k) - 1;<a name="line.1813"></a>
<span class="sourceLineNo">1814</span>                                        if (i == 0) {<a name="line.1814"></a>
<span class="sourceLineNo">1815</span>                                                lMap.remove(k);<a name="line.1815"></a>
<span class="sourceLineNo">1816</span>                                        } else {<a name="line.1816"></a>
<span class="sourceLineNo">1817</span>                                                lMap.put(k, i);<a name="line.1817"></a>
<span class="sourceLineNo">1818</span>                                        }<a name="line.1818"></a>
<span class="sourceLineNo">1819</span>                                        i = lMap.get(x);<a name="line.1819"></a>
<span class="sourceLineNo">1820</span>                                        if (i == null) {<a name="line.1820"></a>
<span class="sourceLineNo">1821</span>                                                lMap.put(x, 1);<a name="line.1821"></a>
<span class="sourceLineNo">1822</span>                                        } else {<a name="line.1822"></a>
<span class="sourceLineNo">1823</span>                                                lMap.put(x, i + 1);<a name="line.1823"></a>
<span class="sourceLineNo">1824</span>                                        }<a name="line.1824"></a>
<span class="sourceLineNo">1825</span>                                }<a name="line.1825"></a>
<span class="sourceLineNo">1826</span>                        } else {<a name="line.1826"></a>
<span class="sourceLineNo">1827</span>                                i = lMap.get(x);<a name="line.1827"></a>
<span class="sourceLineNo">1828</span>                                if (i == null) {<a name="line.1828"></a>
<span class="sourceLineNo">1829</span>                                        lMap.put(x, 1);<a name="line.1829"></a>
<span class="sourceLineNo">1830</span>                                } else {<a name="line.1830"></a>
<span class="sourceLineNo">1831</span>                                        lMap.put(x, i + 1);<a name="line.1831"></a>
<span class="sourceLineNo">1832</span>                                }<a name="line.1832"></a>
<span class="sourceLineNo">1833</span>                                ml++;<a name="line.1833"></a>
<span class="sourceLineNo">1834</span>                        }<a name="line.1834"></a>
<span class="sourceLineNo">1835</span><a name="line.1835"></a>
<span class="sourceLineNo">1836</span>                        if (mh == nh) {<a name="line.1836"></a>
<span class="sourceLineNo">1837</span>                                Double k = hMap.firstKey();<a name="line.1837"></a>
<span class="sourceLineNo">1838</span>                                if (x &gt; k) {<a name="line.1838"></a>
<span class="sourceLineNo">1839</span>                                        i = hMap.get(k) - 1;<a name="line.1839"></a>
<span class="sourceLineNo">1840</span>                                        if (i == 0) {<a name="line.1840"></a>
<span class="sourceLineNo">1841</span>                                                hMap.remove(k);<a name="line.1841"></a>
<span class="sourceLineNo">1842</span>                                        } else {<a name="line.1842"></a>
<span class="sourceLineNo">1843</span>                                                hMap.put(k, i);<a name="line.1843"></a>
<span class="sourceLineNo">1844</span>                                        }<a name="line.1844"></a>
<span class="sourceLineNo">1845</span>                                        i = hMap.get(x);<a name="line.1845"></a>
<span class="sourceLineNo">1846</span>                                        if (i == null) {<a name="line.1846"></a>
<span class="sourceLineNo">1847</span>                                                hMap.put(x, 1);<a name="line.1847"></a>
<span class="sourceLineNo">1848</span>                                        } else {<a name="line.1848"></a>
<span class="sourceLineNo">1849</span>                                                hMap.put(x, i+1);<a name="line.1849"></a>
<span class="sourceLineNo">1850</span>                                        }<a name="line.1850"></a>
<span class="sourceLineNo">1851</span>                                }<a name="line.1851"></a>
<span class="sourceLineNo">1852</span>                        } else {<a name="line.1852"></a>
<span class="sourceLineNo">1853</span>                                i = hMap.get(x);<a name="line.1853"></a>
<span class="sourceLineNo">1854</span>                                if (i == null) {<a name="line.1854"></a>
<span class="sourceLineNo">1855</span>                                        hMap.put(x, 1);<a name="line.1855"></a>
<span class="sourceLineNo">1856</span>                                } else {<a name="line.1856"></a>
<span class="sourceLineNo">1857</span>                                        hMap.put(x, i+1);<a name="line.1857"></a>
<span class="sourceLineNo">1858</span>                                }<a name="line.1858"></a>
<span class="sourceLineNo">1859</span>                                mh++;<a name="line.1859"></a>
<span class="sourceLineNo">1860</span>                        }<a name="line.1860"></a>
<span class="sourceLineNo">1861</span>                }<a name="line.1861"></a>
<span class="sourceLineNo">1862</span><a name="line.1862"></a>
<span class="sourceLineNo">1863</span>                // Attempt to make values distinct<a name="line.1863"></a>
<span class="sourceLineNo">1864</span>                double lx = lMap.lastKey();<a name="line.1864"></a>
<span class="sourceLineNo">1865</span>                double hx = hMap.firstKey();<a name="line.1865"></a>
<span class="sourceLineNo">1866</span>                if (lx &gt;= hx) {<a name="line.1866"></a>
<span class="sourceLineNo">1867</span>                        Double h = hMap.higherKey(lx);<a name="line.1867"></a>
<span class="sourceLineNo">1868</span>                        if (h != null) {<a name="line.1868"></a>
<span class="sourceLineNo">1869</span>                                hx = h;<a name="line.1869"></a>
<span class="sourceLineNo">1870</span>                                mh--;<a name="line.1870"></a>
<span class="sourceLineNo">1871</span>                        } else {<a name="line.1871"></a>
<span class="sourceLineNo">1872</span>                                Double l = lMap.lowerKey(hx);<a name="line.1872"></a>
<span class="sourceLineNo">1873</span>                                if (l != null) {<a name="line.1873"></a>
<span class="sourceLineNo">1874</span>                                        lx = l;<a name="line.1874"></a>
<span class="sourceLineNo">1875</span>                                        ml--;<a name="line.1875"></a>
<span class="sourceLineNo">1876</span>                                }<a name="line.1876"></a>
<span class="sourceLineNo">1877</span>                        }<a name="line.1877"></a>
<span class="sourceLineNo">1878</span>                        <a name="line.1878"></a>
<span class="sourceLineNo">1879</span>                }<a name="line.1879"></a>
<span class="sourceLineNo">1880</span>                return new double[] {lMap.lastKey(), hMap.firstKey(), ml, mh};<a name="line.1880"></a>
<span class="sourceLineNo">1881</span>        }<a name="line.1881"></a>
<span class="sourceLineNo">1882</span><a name="line.1882"></a>
<span class="sourceLineNo">1883</span>        static double[] outlierValuesList(final Dataset a, final IndexIterator it, int nl, int nh) {<a name="line.1883"></a>
<span class="sourceLineNo">1884</span>                final List&lt;Double&gt; lList = new ArrayList&lt;Double&gt;(nl);<a name="line.1884"></a>
<span class="sourceLineNo">1885</span>                final List&lt;Double&gt; hList = new ArrayList&lt;Double&gt;(nh);<a name="line.1885"></a>
<span class="sourceLineNo">1886</span><a name="line.1886"></a>
<span class="sourceLineNo">1887</span>                double lx = Double.POSITIVE_INFINITY;<a name="line.1887"></a>
<span class="sourceLineNo">1888</span>                double hx = Double.NEGATIVE_INFINITY;<a name="line.1888"></a>
<span class="sourceLineNo">1889</span><a name="line.1889"></a>
<span class="sourceLineNo">1890</span>                while (it.hasNext()) {<a name="line.1890"></a>
<span class="sourceLineNo">1891</span>                        double x = a.getElementDoubleAbs(it.index);<a name="line.1891"></a>
<span class="sourceLineNo">1892</span>                        if (Double.isNaN(x)) {<a name="line.1892"></a>
<span class="sourceLineNo">1893</span>                                continue;<a name="line.1893"></a>
<span class="sourceLineNo">1894</span>                        }<a name="line.1894"></a>
<span class="sourceLineNo">1895</span>                        if (x &lt; lx) {<a name="line.1895"></a>
<span class="sourceLineNo">1896</span>                                if (lList.size() == nl) {<a name="line.1896"></a>
<span class="sourceLineNo">1897</span>                                        lList.remove(lx);<a name="line.1897"></a>
<span class="sourceLineNo">1898</span>                                }<a name="line.1898"></a>
<span class="sourceLineNo">1899</span>                                lList.add(x);<a name="line.1899"></a>
<span class="sourceLineNo">1900</span>                                lx = Collections.max(lList);<a name="line.1900"></a>
<span class="sourceLineNo">1901</span>                        } else if (x == lx) {<a name="line.1901"></a>
<span class="sourceLineNo">1902</span>                                if (lList.size() &lt; nl) {<a name="line.1902"></a>
<span class="sourceLineNo">1903</span>                                        lList.add(x);<a name="line.1903"></a>
<span class="sourceLineNo">1904</span>                                }<a name="line.1904"></a>
<span class="sourceLineNo">1905</span>                        }<a name="line.1905"></a>
<span class="sourceLineNo">1906</span><a name="line.1906"></a>
<span class="sourceLineNo">1907</span>                        if (x &gt; hx) {<a name="line.1907"></a>
<span class="sourceLineNo">1908</span>                                if (hList.size() == nh) {<a name="line.1908"></a>
<span class="sourceLineNo">1909</span>                                        hList.remove(hx);<a name="line.1909"></a>
<span class="sourceLineNo">1910</span>                                }<a name="line.1910"></a>
<span class="sourceLineNo">1911</span>                                hList.add(x);<a name="line.1911"></a>
<span class="sourceLineNo">1912</span>                                hx = Collections.min(hList);<a name="line.1912"></a>
<span class="sourceLineNo">1913</span>                        } else if (x == hx) {<a name="line.1913"></a>
<span class="sourceLineNo">1914</span>                                if (hList.size() &lt; nh) {<a name="line.1914"></a>
<span class="sourceLineNo">1915</span>                                        hList.add(x);<a name="line.1915"></a>
<span class="sourceLineNo">1916</span>                                }<a name="line.1916"></a>
<span class="sourceLineNo">1917</span>                        }<a name="line.1917"></a>
<span class="sourceLineNo">1918</span>                }<a name="line.1918"></a>
<span class="sourceLineNo">1919</span><a name="line.1919"></a>
<span class="sourceLineNo">1920</span>                nl = lList.size();<a name="line.1920"></a>
<span class="sourceLineNo">1921</span>                nh = hList.size();<a name="line.1921"></a>
<span class="sourceLineNo">1922</span><a name="line.1922"></a>
<span class="sourceLineNo">1923</span>                // Attempt to make values distinct<a name="line.1923"></a>
<span class="sourceLineNo">1924</span>                if (lx &gt;= hx) {<a name="line.1924"></a>
<span class="sourceLineNo">1925</span>                        Collections.sort(hList);<a name="line.1925"></a>
<span class="sourceLineNo">1926</span>                        for (double h : hList) {<a name="line.1926"></a>
<span class="sourceLineNo">1927</span>                                if (h &gt; hx) {<a name="line.1927"></a>
<span class="sourceLineNo">1928</span>                                        hx = h;<a name="line.1928"></a>
<span class="sourceLineNo">1929</span>                                        break;<a name="line.1929"></a>
<span class="sourceLineNo">1930</span>                                }<a name="line.1930"></a>
<span class="sourceLineNo">1931</span>                                nh--;<a name="line.1931"></a>
<span class="sourceLineNo">1932</span>                        }<a name="line.1932"></a>
<span class="sourceLineNo">1933</span>                        if (lx &gt;= hx) {<a name="line.1933"></a>
<span class="sourceLineNo">1934</span>                                Collections.sort(lList);<a name="line.1934"></a>
<span class="sourceLineNo">1935</span>                                Collections.reverse(lList);<a name="line.1935"></a>
<span class="sourceLineNo">1936</span>                                for (double l : lList) {<a name="line.1936"></a>
<span class="sourceLineNo">1937</span>                                        if (l &lt; lx) {<a name="line.1937"></a>
<span class="sourceLineNo">1938</span>                                                lx = l;<a name="line.1938"></a>
<span class="sourceLineNo">1939</span>                                                break;<a name="line.1939"></a>
<span class="sourceLineNo">1940</span>                                        }<a name="line.1940"></a>
<span class="sourceLineNo">1941</span>                                        nl--;<a name="line.1941"></a>
<span class="sourceLineNo">1942</span>                                }<a name="line.1942"></a>
<span class="sourceLineNo">1943</span>                        }<a name="line.1943"></a>
<span class="sourceLineNo">1944</span>                }<a name="line.1944"></a>
<span class="sourceLineNo">1945</span>                return new double[] {lx, hx, nl, nh};<a name="line.1945"></a>
<span class="sourceLineNo">1946</span>        }<a name="line.1946"></a>
<span class="sourceLineNo">1947</span><a name="line.1947"></a>
<span class="sourceLineNo">1948</span>        /**<a name="line.1948"></a>
<span class="sourceLineNo">1949</span>         * See {@link #covariance(Dataset a, Dataset b, boolean rowvar, boolean bias, Integer ddof)} with b = null, rowvar = true, bias = false and ddof = null.<a name="line.1949"></a>
<span class="sourceLineNo">1950</span>         * @param a<a name="line.1950"></a>
<span class="sourceLineNo">1951</span>         * @return covariance array of a<a name="line.1951"></a>
<span class="sourceLineNo">1952</span>         */<a name="line.1952"></a>
<span class="sourceLineNo">1953</span>        public static Dataset covariance(final Dataset a) {<a name="line.1953"></a>
<span class="sourceLineNo">1954</span>                return covariance(a, true, false, null); <a name="line.1954"></a>
<span class="sourceLineNo">1955</span>        }<a name="line.1955"></a>
<span class="sourceLineNo">1956</span><a name="line.1956"></a>
<span class="sourceLineNo">1957</span>        /**<a name="line.1957"></a>
<span class="sourceLineNo">1958</span>         * See {@link #covariance(Dataset a, Dataset b, boolean rowvar, boolean bias, Integer ddof)} with b = null.<a name="line.1958"></a>
<span class="sourceLineNo">1959</span>         * @param a<a name="line.1959"></a>
<span class="sourceLineNo">1960</span>         * @return covariance array of a<a name="line.1960"></a>
<span class="sourceLineNo">1961</span>         * @since 2.0<a name="line.1961"></a>
<span class="sourceLineNo">1962</span>         */<a name="line.1962"></a>
<span class="sourceLineNo">1963</span>        public static Dataset covariance(final Dataset a, <a name="line.1963"></a>
<span class="sourceLineNo">1964</span>                        boolean rowvar, boolean bias, Integer ddof) {<a name="line.1964"></a>
<span class="sourceLineNo">1965</span>                return covariance(a, null, rowvar, bias, ddof);<a name="line.1965"></a>
<span class="sourceLineNo">1966</span>        }<a name="line.1966"></a>
<span class="sourceLineNo">1967</span><a name="line.1967"></a>
<span class="sourceLineNo">1968</span>        /**<a name="line.1968"></a>
<span class="sourceLineNo">1969</span>         * See {@link #covariance(Dataset a, Dataset b, boolean rowvar, boolean bias, Integer ddof)} with b = null, rowvar = true, bias = false and ddof = null.<a name="line.1969"></a>
<span class="sourceLineNo">1970</span>         * @param a<a name="line.1970"></a>
<span class="sourceLineNo">1971</span>         * @return covariance array of a concatenated with b<a name="line.1971"></a>
<span class="sourceLineNo">1972</span>         */<a name="line.1972"></a>
<span class="sourceLineNo">1973</span>        public static Dataset covariance(final Dataset a, final Dataset b) {<a name="line.1973"></a>
<span class="sourceLineNo">1974</span>                return covariance(a, b, true, false, null);<a name="line.1974"></a>
<span class="sourceLineNo">1975</span>        }<a name="line.1975"></a>
<span class="sourceLineNo">1976</span><a name="line.1976"></a>
<span class="sourceLineNo">1977</span>        /**<a name="line.1977"></a>
<span class="sourceLineNo">1978</span>         * Calculate the covariance matrix (array) of a concatenated with b. This <a name="line.1978"></a>
<span class="sourceLineNo">1979</span>         * method is directly based on the implementation in numpy (cov). <a name="line.1979"></a>
<span class="sourceLineNo">1980</span>         * @param a Array containing multiple variable and observations. Each row represents a variable, each column an observation.<a name="line.1980"></a>
<span class="sourceLineNo">1981</span>         * @param b An extra set of variables and observations. Must be of same type as a and have a compatible shape. <a name="line.1981"></a>
<span class="sourceLineNo">1982</span>         * @param rowvar When true (default), each row is a variable; when false each column is a variable.<a name="line.1982"></a>
<span class="sourceLineNo">1983</span>         * @param bias Default normalisation is (N - 1) - N is number of observations. If set true, normalisation is (N). <a name="line.1983"></a>
<span class="sourceLineNo">1984</span>         * @param ddof Default normalisation is (N - 1). If ddof is set, then normalisation is (N - ddof).<a name="line.1984"></a>
<span class="sourceLineNo">1985</span>         * @return covariance array of a concatenated with b<a name="line.1985"></a>
<span class="sourceLineNo">1986</span>         * @since 2.0<a name="line.1986"></a>
<span class="sourceLineNo">1987</span>         */<a name="line.1987"></a>
<span class="sourceLineNo">1988</span>        public static Dataset covariance (final Dataset a, final Dataset b, <a name="line.1988"></a>
<span class="sourceLineNo">1989</span>                        boolean rowvar, boolean bias, Integer ddof) {<a name="line.1989"></a>
<span class="sourceLineNo">1990</span>                <a name="line.1990"></a>
<span class="sourceLineNo">1991</span>                //Create a working copy of the dataset &amp; check its rank.<a name="line.1991"></a>
<span class="sourceLineNo">1992</span>                Dataset vars = a.clone();<a name="line.1992"></a>
<span class="sourceLineNo">1993</span>                if (a.getRank() == 1) {<a name="line.1993"></a>
<span class="sourceLineNo">1994</span>                        vars.setShape(1, a.getShapeRef()[0]);<a name="line.1994"></a>
<span class="sourceLineNo">1995</span>                }<a name="line.1995"></a>
<span class="sourceLineNo">1996</span>                <a name="line.1996"></a>
<span class="sourceLineNo">1997</span>                //1D of variables, so consider rows as variables<a name="line.1997"></a>
<span class="sourceLineNo">1998</span>                if (vars.getShapeRef()[0] == 1) {<a name="line.1998"></a>
<span class="sourceLineNo">1999</span>                        rowvar = true;<a name="line.1999"></a>
<span class="sourceLineNo">2000</span>                }<a name="line.2000"></a>
<span class="sourceLineNo">2001</span>                <a name="line.2001"></a>
<span class="sourceLineNo">2002</span>                //nr is the number of records; axis is index<a name="line.2002"></a>
<span class="sourceLineNo">2003</span>                int nr, axis;<a name="line.2003"></a>
<span class="sourceLineNo">2004</span>                if (rowvar) {<a name="line.2004"></a>
<span class="sourceLineNo">2005</span>                        nr = vars.getShapeRef()[1];<a name="line.2005"></a>
<span class="sourceLineNo">2006</span>                        axis = 0;<a name="line.2006"></a>
<span class="sourceLineNo">2007</span>                } else {<a name="line.2007"></a>
<span class="sourceLineNo">2008</span>                        nr = vars.getShapeRef()[0];<a name="line.2008"></a>
<span class="sourceLineNo">2009</span>                        axis = 1;<a name="line.2009"></a>
<span class="sourceLineNo">2010</span>                }<a name="line.2010"></a>
<span class="sourceLineNo">2011</span>                <a name="line.2011"></a>
<span class="sourceLineNo">2012</span>                //Set the reduced degrees of freedom &amp; normalisation factor<a name="line.2012"></a>
<span class="sourceLineNo">2013</span>                if (ddof == null) {<a name="line.2013"></a>
<span class="sourceLineNo">2014</span>                        if (bias == false) {<a name="line.2014"></a>
<span class="sourceLineNo">2015</span>                                ddof = 1;<a name="line.2015"></a>
<span class="sourceLineNo">2016</span>                        } else {<a name="line.2016"></a>
<span class="sourceLineNo">2017</span>                                ddof = 0;<a name="line.2017"></a>
<span class="sourceLineNo">2018</span>                        }<a name="line.2018"></a>
<span class="sourceLineNo">2019</span>                }<a name="line.2019"></a>
<span class="sourceLineNo">2020</span>                double norm_fact = nr - ddof;<a name="line.2020"></a>
<span class="sourceLineNo">2021</span>                if (norm_fact &lt;= 0.) {<a name="line.2021"></a>
<span class="sourceLineNo">2022</span>                        //TODO Some sort of warning here?<a name="line.2022"></a>
<span class="sourceLineNo">2023</span>                        norm_fact = 0.;<a name="line.2023"></a>
<span class="sourceLineNo">2024</span>                }<a name="line.2024"></a>
<span class="sourceLineNo">2025</span>                <a name="line.2025"></a>
<span class="sourceLineNo">2026</span>                //Concatenate additional set of variables with main set<a name="line.2026"></a>
<span class="sourceLineNo">2027</span>                if (b != null) {<a name="line.2027"></a>
<span class="sourceLineNo">2028</span>                        //Create a working copy of the dataset &amp; check its rank.<a name="line.2028"></a>
<span class="sourceLineNo">2029</span>                        Dataset extraVars = b.clone();<a name="line.2029"></a>
<span class="sourceLineNo">2030</span>                        if (b.getRank() == 1) {<a name="line.2030"></a>
<span class="sourceLineNo">2031</span>                                extraVars.setShape(1, a.getShapeRef()[0]);<a name="line.2031"></a>
<span class="sourceLineNo">2032</span>                        }<a name="line.2032"></a>
<span class="sourceLineNo">2033</span>                        vars = DatasetUtils.concatenate(new Dataset[]{vars, extraVars}, axis);<a name="line.2033"></a>
<span class="sourceLineNo">2034</span>                }<a name="line.2034"></a>
<span class="sourceLineNo">2035</span>                <a name="line.2035"></a>
<span class="sourceLineNo">2036</span>                //Calculate deviations &amp; covariance matrix<a name="line.2036"></a>
<span class="sourceLineNo">2037</span>                Dataset varsMean = vars.mean(1-axis, false);<a name="line.2037"></a>
<span class="sourceLineNo">2038</span>                //-vars &amp; varsMean need same shape (this is a hack!)<a name="line.2038"></a>
<span class="sourceLineNo">2039</span>                int[] meanShape = vars.getShape();<a name="line.2039"></a>
<span class="sourceLineNo">2040</span>                meanShape[1-axis] = 1;<a name="line.2040"></a>
<span class="sourceLineNo">2041</span>                varsMean.setShape(meanShape);<a name="line.2041"></a>
<span class="sourceLineNo">2042</span>                vars.isubtract(varsMean);<a name="line.2042"></a>
<span class="sourceLineNo">2043</span>                Dataset cov;<a name="line.2043"></a>
<span class="sourceLineNo">2044</span>                if (rowvar) {<a name="line.2044"></a>
<span class="sourceLineNo">2045</span>                        cov = Maths.divide(LinearAlgebra.dotProduct(vars, Maths.conjugate(vars.transpose())), norm_fact).squeeze();<a name="line.2045"></a>
<span class="sourceLineNo">2046</span>                } else {<a name="line.2046"></a>
<span class="sourceLineNo">2047</span>                        cov = Maths.divide(LinearAlgebra.dotProduct(vars.transpose(), Maths.conjugate(vars)), norm_fact).squeeze();<a name="line.2047"></a>
<span class="sourceLineNo">2048</span>                }<a name="line.2048"></a>
<span class="sourceLineNo">2049</span>                return cov;<a name="line.2049"></a>
<span class="sourceLineNo">2050</span>        }<a name="line.2050"></a>
<span class="sourceLineNo">2051</span>}<a name="line.2051"></a>




























































</pre>
</div>
</body>
</html>
