mathutils.java
来自「是实现关系型贝叶斯网络一中机器学习算法」· Java 代码 · 共 109 行
JAVA
109 行
package rmn;import java.lang.reflect.*;class MathUtils { static public void dotProduct(double[] v1, double v2[]) { assert v1.length == v2.length : v2.length; for (int i = 0; i < v1.length; i++) { v1[i] = v1[i] * v2[i]; assert !Double.isNaN(v1[i]) : v2[i]; assert !Double.isInfinite(v1[i]) : v2[i]; } } static public void dotQuotient(double[] v1, double v2[]) { assert v1.length == v2.length : v2.length; for (int i = 0; i < v1.length; i++) { if (v2[i] == 0) { System.out.println("Quotient by zero!"); System.exit(1); } assert !Double.isNaN(v1[i]) : v1[i]; assert !Double.isNaN(v2[i]) : v2[i]; v1[i] = v1[i] / v2[i]; assert !Double.isNaN(v1[i]) : v2[i]; assert !Double.isInfinite(v1[i]) : v2[i]; } } static public double[] clone(double[] v) { double[] w = new double[v.length]; System.arraycopy(v, 0, w, 0, v.length); return w; } static public void normalize(double[] v) { double total = 0; for (int i = 0; i < v.length; i++) total += v[i]; if (Double.isNaN(total) || Double.isInfinite(total) || total == 0) { for (int i = 0; i < v.length; i++) System.out.println("v[" + i + "] = " + v[i]); } assert !Double.isNaN(total); assert !Double.isInfinite(total); assert total != 0; for (int i = 0; i < v.length; i++) { v[i] = v[i] / total; assert !Double.isNaN(v[i]); assert !Double.isInfinite(v[i]); } } static public boolean approxeq(double[] v1, double[] v2, double tol) { assert v1.length == v2.length : v2.length; for (int i = 0; i < v1.length; i++) if (Math.abs(v1[i] - v2[i]) > tol) return false; return true; } static public Method getSumOrMax(boolean bMaximize) { Method method = null; try { Class theClass = Class.forName("rmn.MathUtils"); Class[] paramTypes = {Double.TYPE, Double.TYPE}; method = theClass.getMethod("sum", paramTypes); if (bMaximize) method = theClass.getMethod("max", paramTypes); } catch (Exception e) { System.err.println(e); System.exit(1); } return method; } static public double sum(double a, double b) { double res = a + b; assert !Double.isNaN(res) : a; assert !Double.isInfinite(res) : a; return a + b; } static public double max(double a, double b) { if (a > b) return a; return b; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?