| <!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.1.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.1.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 “in-memory” 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’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’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’s distributed modes, such as Spark batch mode or Hadoop batch mode, to take advantage of SystemML’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> |
| |
| <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>’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 “hello world” example, which invokes SystemML via JMLC and prints “hello world” 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’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">// 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="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="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"><</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"><</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"><</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">></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"><</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"><</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">></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> |