blob: c8a6e815b26347f0b292fc7f868feb4f3a916efb [file] [log] [blame]
<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
<head>
<title>Java Machine Learning Connector (JMLC) - SystemML 1.2.0</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="description" content="Java Machine Learning Connector (JMLC)">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/pygments-default.css">
<link rel="shortcut icon" href="img/favicon.png">
</head>
<body>
<!--[if lt IE 7]>
<p class="chromeframe">You are using an outdated browser. <a href="http://browsehappy.com/">Upgrade your browser today</a> or <a href="http://www.google.com/chromeframe/?redirect=true">install Google Chrome Frame</a> to better experience this site.</p>
<![endif]-->
<header class="navbar navbar-default navbar-fixed-top" id="topbar">
<div class="container">
<div class="navbar-header">
<div class="navbar-brand brand projectlogo">
<a href="http://systemml.apache.org/"><img class="logo" src="img/systemml-logo.png" alt="Apache SystemML" title="Apache SystemML"/></a>
</div>
<div class="navbar-brand brand projecttitle">
<a href="http://systemml.apache.org/">Apache SystemML<sup id="trademark"></sup></a><br/>
<span class="version">1.2.0</span>
</div>
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<nav class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<li><a href="index.html">Overview</a></li>
<li><a href="https://github.com/apache/systemml">GitHub</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Documentation<b class="caret"></b></a>
<ul class="dropdown-menu" role="menu">
<li><b>Running SystemML:</b></li>
<li><a href="https://github.com/apache/systemml">SystemML GitHub README</a></li>
<li><a href="spark-mlcontext-programming-guide.html">Spark MLContext</a></li>
<li><a href="spark-batch-mode.html">Spark Batch Mode</a>
<li><a href="hadoop-batch-mode.html">Hadoop Batch Mode</a>
<li><a href="standalone-guide.html">Standalone Guide</a></li>
<li><a href="jmlc.html">Java Machine Learning Connector (JMLC)</a>
<li class="divider"></li>
<li><b>Language Guides:</b></li>
<li><a href="dml-language-reference.html">DML Language Reference</a></li>
<li><a href="beginners-guide-to-dml-and-pydml.html">Beginner's Guide to DML and PyDML</a></li>
<li><a href="beginners-guide-python.html">Beginner's Guide for Python Users</a></li>
<li><a href="python-reference.html">Reference Guide for Python Users</a></li>
<li class="divider"></li>
<li><b>ML Algorithms:</b></li>
<li><a href="algorithms-reference.html">Algorithms Reference</a></li>
<li class="divider"></li>
<li><b>Tools:</b></li>
<li><a href="debugger-guide.html">Debugger Guide</a></li>
<li><a href="developer-tools-systemml.html">IDE Guide</a></li>
<li class="divider"></li>
<li><b>Other:</b></li>
<li><a href="contributing-to-systemml.html">Contributing to SystemML</a></li>
<li><a href="engine-dev-guide.html">Engine Developer Guide</a></li>
<li><a href="troubleshooting-guide.html">Troubleshooting Guide</a></li>
<li><a href="release-process.html">Release Process</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">API Docs<b class="caret"></b></a>
<ul class="dropdown-menu" role="menu">
<li><a href="./api/java/index.html">Java</a></li>
<li><a href="./api/python/index.html">Python</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Issues<b class="caret"></b></a>
<ul class="dropdown-menu" role="menu">
<li><b>JIRA:</b></li>
<li><a href="https://issues.apache.org/jira/browse/SYSTEMML">SystemML JIRA</a></li>
</ul>
</li>
</ul>
</nav>
</div>
</header>
<div class="container" id="content">
<h1 class="title">Java Machine Learning Connector (JMLC)</h1>
<!--
-->
<h1 id="overview">Overview</h1>
<p>The <code>Java Machine Learning Connector (JMLC)</code> API is a programmatic interface for interacting with SystemML
in an embedded fashion. To use JMLC, the small footprint &#8220;in-memory&#8221; SystemML jar file needs to be included on the
classpath of the Java application, since JMLC invokes SystemML in an existing Java Virtual Machine. Because
of this, JMLC allows access to SystemML&#8217;s optimizations and fast linear algebra, but the bulk performance
gain from running SystemML on a large Spark or Hadoop cluster is not available. However, this embeddable nature
allows SystemML to be part of a production pipeline for tasks such as scoring.</p>
<p>The primary purpose of JMLC is as a scoring API, where your scoring function is expressed using
SystemML&#8217;s DML (Declarative Machine Learning) language. Scoring occurs on a single machine in a single
JVM on a relatively small amount of input data which produces a relatively small amount of output data.
For consistency, it is important to be able to express a scoring function in the same DML language used for
training a model, since different implementations of linear algebra (for instance MATLAB and R) can deliver
slightly different results.</p>
<p>In addition to scoring, embedded SystemML can be used for tasks such as unsupervised learning (for
example, clustering) in the context of a larger application running on a single machine.</p>
<p>Performance penalties include startup costs, so JMLC has facilities to perform some startup tasks once,
such as script precompilation. Due to startup costs, it tends to be best practice to do batch scoring, such
as scoring 1000 records at a time. For large amounts of data, it is recommended to run DML in one
of SystemML&#8217;s distributed modes, such as Spark batch mode or Hadoop batch mode, to take advantage of SystemML&#8217;s
distributed computing capabilities. JMLC offers embeddability at the cost of performance, so its use is
dependent on the nature of the business use case being addressed.</p>
<h2 id="statistics">Statistics</h2>
<p>JMLC can be configured to gather runtime statistics, as in the MLContext API, by calling Connection&#8217;s <code>setStatistics()</code>
method with a value of <code>true</code>. JMLC can also be configured to gather statistics on the memory used by matrices and
frames in the DML script. To enable collection of memory statistics, call Connection&#8217;s <code>gatherMemStats()</code> method
with a value of <code>true</code>. When finegrained statistics are enabled in <code>SystemML.conf</code>, JMLC will also report the variables
in the DML script which used the most memory. An example showing how to enable statistics in JMLC is presented in the
section below.</p>
<hr />
<h1 id="examples">Examples</h1>
<p>JMLC is patterned loosely after JDBC. To interact with SystemML via JMLC, we can begin by creating a <code>Connection</code>
object. We can then prepare (precompile) a DML script by calling the <code>Connection</code>&#8217;s <code>prepareScript</code> method,
which returns a <code>PreparedScript</code> object. We can then call the <code>executeScript</code> method on the <code>PreparedScript</code>
object to invoke this script.</p>
<p>Here, we see a &#8220;hello world&#8221; example, which invokes SystemML via JMLC and prints &#8220;hello world&#8221; to the console.</p>
<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="n">Connection</span> <span class="n">conn</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Connection</span><span class="o">();</span>
<span class="n">String</span> <span class="n">dml</span> <span class="o">=</span> <span class="s">"print('hello world');"</span><span class="o">;</span>
<span class="n">PreparedScript</span> <span class="n">script</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="na">prepareScript</span><span class="o">(</span><span class="n">dml</span><span class="o">,</span> <span class="k">new</span> <span class="n">String</span><span class="o">[</span><span class="mi">0</span><span class="o">],</span> <span class="k">new</span> <span class="n">String</span><span class="o">[</span><span class="mi">0</span><span class="o">],</span> <span class="kc">false</span><span class="o">);</span>
<span class="n">script</span><span class="o">.</span><span class="na">executeScript</span><span class="o">();</span></code></pre></div>
<hr />
<p>Next, let&#8217;s consider a more practical example. Consider the following DML script. It takes input data matrix <code>X</code>
and input model matrix <code>W</code>. Scores are computed, and it returns a (n x 1) matrix <code>predicted_y</code> consisting of the
column indexes of the maximum values of each row in the <code>scores</code> matrix. Note that since values are being read
in and out programmatically, we can ignore the parameters in the <code>read</code> and <code>write</code> statements.</p>
<h4 id="dml">DML</h4>
<div class="highlight"><pre><code class="language-r" data-lang="r"><span class="n">X</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">read</span><span class="p">(</span><span class="s2">"./tmp/X"</span><span class="p">,</span><span class="w"> </span><span class="n">rows</span><span class="o">=</span><span class="m">-1</span><span class="p">,</span><span class="w"> </span><span class="n">cols</span><span class="o">=</span><span class="m">-1</span><span class="p">);</span><span class="w">
</span><span class="n">W</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">read</span><span class="p">(</span><span class="s2">"./tmp/W"</span><span class="p">,</span><span class="w"> </span><span class="n">rows</span><span class="o">=</span><span class="m">-1</span><span class="p">,</span><span class="w"> </span><span class="n">cols</span><span class="o">=</span><span class="m">-1</span><span class="p">);</span><span class="w">
</span><span class="n">numRows</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">nrow</span><span class="p">(</span><span class="n">X</span><span class="p">);</span><span class="w">
</span><span class="n">numCols</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ncol</span><span class="p">(</span><span class="n">X</span><span class="p">);</span><span class="w">
</span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">W</span><span class="p">[</span><span class="n">numCols</span><span class="m">+1</span><span class="p">,]</span><span class="w">
</span><span class="n">scores</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">X</span><span class="w"> </span><span class="o">%*%</span><span class="w"> </span><span class="n">W</span><span class="p">[</span><span class="m">1</span><span class="o">:</span><span class="n">numCols</span><span class="p">,]</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">b</span><span class="p">;</span><span class="w">
</span><span class="n">predicted_y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rowIndexMax</span><span class="p">(</span><span class="n">scores</span><span class="p">);</span><span class="w">
</span><span class="n">write</span><span class="p">(</span><span class="n">predicted_y</span><span class="p">,</span><span class="w"> </span><span class="s2">"./tmp"</span><span class="p">,</span><span class="w"> </span><span class="n">format</span><span class="o">=</span><span class="s2">"text"</span><span class="p">);</span></code></pre></div>
<p>In the Java below, we initialize SystemML by obtaining a <code>Connection</code> object. Next, we read in the above DML script
(<code>"scoring-example.dml"</code>) as a <code>String</code>. We precompile this script by calling the <code>prepareScript</code> method on the
<code>Connection</code> object with the names of the inputs (<code>"W"</code> and <code>"X"</code>) and outputs (<code>"predicted_y"</code>) to register.</p>
<p>Following this, we set matrix <code>"W"</code> and we set a matrix of input data <code>"X"</code>. We execute the script and read
the resulting <code>"predicted_y"</code> matrix. We repeat this process. When done, we close the SystemML <code>Connection</code>.</p>
<h4 id="java">Java</h4>
<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="kn">package</span> <span class="n">org</span><span class="o">.</span><span class="na">apache</span><span class="o">.</span><span class="na">sysml</span><span class="o">.</span><span class="na">example</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.util.Random</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.apache.sysml.api.jmlc.Connection</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.apache.sysml.api.jmlc.PreparedScript</span><span class="o">;</span>
<span class="kd">public</span> <span class="kd">class</span> <span class="nc">JMLCExample</span> <span class="o">{</span>
<span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
<span class="c1">// obtain connection to SystemML</span>
<span class="n">Connection</span> <span class="n">conn</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Connection</span><span class="o">();</span>
<span class="c1">// turn on gathering of runtime statistics and memory use</span>
<span class="n">conn</span><span class="o">.</span><span class="na">setStatistics</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="n">conn</span><span class="o">.</span><span class="na">gatherMemStats</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="c1">// read in and precompile DML script, registering inputs and outputs</span>
<span class="n">String</span> <span class="n">dml</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="na">readScript</span><span class="o">(</span><span class="s">"scoring-example.dml"</span><span class="o">);</span>
<span class="n">PreparedScript</span> <span class="n">script</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="na">prepareScript</span><span class="o">(</span><span class="n">dml</span><span class="o">,</span> <span class="k">new</span> <span class="n">String</span><span class="o">[]</span> <span class="o">{</span> <span class="s">"W"</span><span class="o">,</span> <span class="s">"X"</span> <span class="o">},</span> <span class="k">new</span> <span class="n">String</span><span class="o">[]</span> <span class="o">{</span> <span class="s">"predicted_y"</span> <span class="o">},</span> <span class="kc">false</span><span class="o">);</span>
<span class="c1">// obtain the runtime plan generated by SystemML</span>
<span class="n">String</span> <span class="n">plan</span> <span class="o">=</span> <span class="n">script</span><span class="o">.</span><span class="na">explain</span><span class="o">();</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">plan</span><span class="o">);</span>
<span class="kt">double</span><span class="o">[][]</span> <span class="n">mtx</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">(</span><span class="mi">4</span><span class="o">,</span> <span class="mi">3</span><span class="o">,</span> <span class="k">new</span> <span class="kt">double</span><span class="o">[]</span> <span class="o">{</span> <span class="mi">1</span><span class="o">,</span> <span class="mi">2</span><span class="o">,</span> <span class="mi">3</span><span class="o">,</span> <span class="mi">4</span><span class="o">,</span> <span class="mi">5</span><span class="o">,</span> <span class="mi">6</span><span class="o">,</span> <span class="mi">7</span><span class="o">,</span> <span class="mi">8</span><span class="o">,</span> <span class="mi">9</span> <span class="o">});</span>
<span class="kt">double</span><span class="o">[][]</span> <span class="n">result</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="c1">// set inputs, execute script, and obtain output</span>
<span class="n">script</span><span class="o">.</span><span class="na">setMatrix</span><span class="o">(</span><span class="s">"W"</span><span class="o">,</span> <span class="n">mtx</span><span class="o">);</span>
<span class="n">script</span><span class="o">.</span><span class="na">setMatrix</span><span class="o">(</span><span class="s">"X"</span><span class="o">,</span> <span class="n">randomMatrix</span><span class="o">(</span><span class="mi">3</span><span class="o">,</span> <span class="mi">3</span><span class="o">,</span> <span class="o">-</span><span class="mi">1</span><span class="o">,</span> <span class="mi">1</span><span class="o">,</span> <span class="mf">0.7</span><span class="o">));</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">script</span><span class="o">.</span><span class="na">executeScript</span><span class="o">().</span><span class="na">getMatrix</span><span class="o">(</span><span class="s">"predicted_y"</span><span class="o">);</span>
<span class="n">displayMatrix</span><span class="o">(</span><span class="n">result</span><span class="o">);</span>
<span class="c1">// print the resulting runtime statistics</span>
<span class="n">String</span> <span class="n">stats</span> <span class="o">=</span> <span class="n">script</span><span class="o">.</span><span class="na">statistics</span><span class="o">();</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">stats</span><span class="o">);</span>
<span class="n">script</span><span class="o">.</span><span class="na">setMatrix</span><span class="o">(</span><span class="s">"W"</span><span class="o">,</span> <span class="n">mtx</span><span class="o">);</span>
<span class="n">script</span><span class="o">.</span><span class="na">setMatrix</span><span class="o">(</span><span class="s">"X"</span><span class="o">,</span> <span class="n">randomMatrix</span><span class="o">(</span><span class="mi">3</span><span class="o">,</span> <span class="mi">3</span><span class="o">,</span> <span class="o">-</span><span class="mi">1</span><span class="o">,</span> <span class="mi">1</span><span class="o">,</span> <span class="mf">0.7</span><span class="o">));</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">script</span><span class="o">.</span><span class="na">executeScript</span><span class="o">().</span><span class="na">getMatrix</span><span class="o">(</span><span class="s">"predicted_y"</span><span class="o">);</span>
<span class="n">displayMatrix</span><span class="o">(</span><span class="n">result</span><span class="o">);</span>
<span class="n">script</span><span class="o">.</span><span class="na">setMatrix</span><span class="o">(</span><span class="s">"W"</span><span class="o">,</span> <span class="n">mtx</span><span class="o">);</span>
<span class="n">script</span><span class="o">.</span><span class="na">setMatrix</span><span class="o">(</span><span class="s">"X"</span><span class="o">,</span> <span class="n">randomMatrix</span><span class="o">(</span><span class="mi">3</span><span class="o">,</span> <span class="mi">3</span><span class="o">,</span> <span class="o">-</span><span class="mi">1</span><span class="o">,</span> <span class="mi">1</span><span class="o">,</span> <span class="mf">0.7</span><span class="o">));</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">script</span><span class="o">.</span><span class="na">executeScript</span><span class="o">().</span><span class="na">getMatrix</span><span class="o">(</span><span class="s">"predicted_y"</span><span class="o">);</span>
<span class="n">displayMatrix</span><span class="o">(</span><span class="n">result</span><span class="o">);</span>
<span class="c1">// close connection</span>
<span class="n">conn</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
<span class="o">}</span>
<span class="kd">public</span> <span class="kd">static</span> <span class="kt">double</span><span class="o">[][]</span> <span class="nf">matrix</span><span class="o">(</span><span class="kt">int</span> <span class="n">rows</span><span class="o">,</span> <span class="kt">int</span> <span class="n">cols</span><span class="o">,</span> <span class="kt">double</span><span class="o">[]</span> <span class="n">vals</span><span class="o">)</span> <span class="o">{</span>
<span class="kt">double</span><span class="o">[][]</span> <span class="n">matrix</span> <span class="o">=</span> <span class="k">new</span> <span class="kt">double</span><span class="o">[</span><span class="n">rows</span><span class="o">][</span><span class="n">cols</span><span class="o">];</span>
<span class="k">if</span> <span class="o">((</span><span class="n">vals</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">||</span> <span class="o">(</span><span class="n">vals</span><span class="o">.</span><span class="na">length</span> <span class="o">==</span> <span class="mi">0</span><span class="o">))</span> <span class="o">{</span>
<span class="k">return</span> <span class="n">matrix</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">vals</span><span class="o">.</span><span class="na">length</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="n">matrix</span><span class="o">[</span><span class="n">i</span> <span class="o">/</span> <span class="n">cols</span><span class="o">][</span><span class="n">i</span> <span class="o">%</span> <span class="n">cols</span><span class="o">]</span> <span class="o">=</span> <span class="n">vals</span><span class="o">[</span><span class="n">i</span><span class="o">];</span>
<span class="o">}</span>
<span class="k">return</span> <span class="n">matrix</span><span class="o">;</span>
<span class="o">}</span>
<span class="kd">public</span> <span class="kd">static</span> <span class="kt">double</span><span class="o">[][]</span> <span class="nf">randomMatrix</span><span class="o">(</span><span class="kt">int</span> <span class="n">rows</span><span class="o">,</span> <span class="kt">int</span> <span class="n">cols</span><span class="o">,</span> <span class="kt">double</span> <span class="n">min</span><span class="o">,</span> <span class="kt">double</span> <span class="n">max</span><span class="o">,</span> <span class="kt">double</span> <span class="n">sparsity</span><span class="o">)</span> <span class="o">{</span>
<span class="kt">double</span><span class="o">[][]</span> <span class="n">matrix</span> <span class="o">=</span> <span class="k">new</span> <span class="kt">double</span><span class="o">[</span><span class="n">rows</span><span class="o">][</span><span class="n">cols</span><span class="o">];</span>
<span class="n">Random</span> <span class="n">random</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Random</span><span class="o">(</span><span class="n">System</span><span class="o">.</span><span class="na">currentTimeMillis</span><span class="o">());</span>
<span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">rows</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">j</span> <span class="o">&lt;</span> <span class="n">cols</span><span class="o">;</span> <span class="n">j</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="n">random</span><span class="o">.</span><span class="na">nextDouble</span><span class="o">()</span> <span class="o">&gt;</span> <span class="n">sparsity</span><span class="o">)</span> <span class="o">{</span>
<span class="k">continue</span><span class="o">;</span>
<span class="o">}</span>
<span class="n">matrix</span><span class="o">[</span><span class="n">i</span><span class="o">][</span><span class="n">j</span><span class="o">]</span> <span class="o">=</span> <span class="o">(</span><span class="n">random</span><span class="o">.</span><span class="na">nextDouble</span><span class="o">()</span> <span class="o">*</span> <span class="o">(</span><span class="n">max</span> <span class="o">-</span> <span class="n">min</span><span class="o">)</span> <span class="o">+</span> <span class="n">min</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">return</span> <span class="n">matrix</span><span class="o">;</span>
<span class="o">}</span>
<span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">displayMatrix</span><span class="o">(</span><span class="kt">double</span><span class="o">[][]</span> <span class="n">matrix</span><span class="o">)</span> <span class="o">{</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Matrix size:"</span> <span class="o">+</span> <span class="n">matrix</span><span class="o">.</span><span class="na">length</span> <span class="o">+</span> <span class="s">"x"</span> <span class="o">+</span> <span class="n">matrix</span><span class="o">[</span><span class="mi">0</span><span class="o">].</span><span class="na">length</span><span class="o">);</span>
<span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">matrix</span><span class="o">.</span><span class="na">length</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">j</span> <span class="o">&lt;</span> <span class="n">matrix</span><span class="o">[</span><span class="mi">0</span><span class="o">].</span><span class="na">length</span><span class="o">;</span> <span class="n">j</span><span class="o">++)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="n">j</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="o">)</span> <span class="o">{</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">", "</span><span class="o">);</span>
<span class="o">}</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="s">"["</span> <span class="o">+</span> <span class="n">i</span> <span class="o">+</span> <span class="s">","</span> <span class="o">+</span> <span class="n">j</span> <span class="o">+</span> <span class="s">"]:"</span> <span class="o">+</span> <span class="n">matrix</span><span class="o">[</span><span class="n">i</span><span class="o">][</span><span class="n">j</span><span class="o">]);</span>
<span class="o">}</span>
<span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span></code></pre></div>
<hr />
<p>For additional information regarding programmatic access to SystemML, please see the
<a href="spark-mlcontext-programming-guide.html">Spark MLContext Programming Guide</a>.</p>
</div> <!-- /container -->
<script src="js/vendor/jquery-1.12.0.min.js"></script>
<script src="js/vendor/bootstrap.min.js"></script>
<script src="js/vendor/anchor.min.js"></script>
<script src="js/main.js"></script>
<!-- Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-71553733-1', 'auto');
ga('send', 'pageview');
</script>
<!-- MathJax Section -->
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
TeX: { equationNumbers: { autoNumber: "AMS" } }
});
</script>
<script>
// Note that we load MathJax this way to work with local file (file://), HTTP and HTTPS.
// We could use "//cdn.mathjax...", but that won't support "file://".
(function(d, script) {
script = d.createElement('script');
script.type = 'text/javascript';
script.async = true;
script.onload = function(){
MathJax.Hub.Config({
tex2jax: {
inlineMath: [ ["$", "$"], ["\\\\(","\\\\)"] ],
displayMath: [ ["$$","$$"], ["\\[", "\\]"] ],
processEscapes: true,
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre']
}
});
};
script.src = ('https:' == document.location.protocol ? 'https://' : 'http://') +
'cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML';
d.getElementsByTagName('head')[0].appendChild(script);
}(document));
</script>
</body>
</html>