Added: systemml/site/docs/1.1.0/beginners-guide-to-dml-and-pydml.html
URL: 
http://svn.apache.org/viewvc/systemml/site/docs/1.1.0/beginners-guide-to-dml-and-pydml.html?rev=1828046&view=auto
==============================================================================
--- systemml/site/docs/1.1.0/beginners-guide-to-dml-and-pydml.html (added)
+++ systemml/site/docs/1.1.0/beginners-guide-to-dml-and-pydml.html Fri Mar 30 
04:31:05 2018
@@ -0,0 +1,1039 @@
+<!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>Beginner's Guide to DML and PyDML - SystemML 1.1.0</title>
+        <meta charset="utf-8">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+        
+        <meta name="description" content="Beginner's Guide to DML and PyDML">
+        
+        <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">Beginner's Guide to DML and PyDML</h1>
+          
+
+          <!--
+
+-->
+
+<ul id="markdown-toc">
+  <li><a href="#overview" id="markdown-toc-overview">Overview</a></li>
+  <li><a href="#script-invocation" id="markdown-toc-script-invocation">Script 
Invocation</a></li>
+  <li><a href="#data-types" id="markdown-toc-data-types">Data Types</a></li>
+  <li><a href="#matrix-basics" id="markdown-toc-matrix-basics">Matrix 
Basics</a>    <ul>
+      <li><a href="#creating-a-matrix" 
id="markdown-toc-creating-a-matrix">Creating a Matrix</a></li>
+      <li><a href="#saving-a-matrix" id="markdown-toc-saving-a-matrix">Saving 
a Matrix</a></li>
+      <li><a href="#loading-a-matrix" 
id="markdown-toc-loading-a-matrix">Loading a Matrix</a></li>
+      <li><a href="#matrix-operations" 
id="markdown-toc-matrix-operations">Matrix Operations</a></li>
+      <li><a href="#matrix-indexing" id="markdown-toc-matrix-indexing">Matrix 
Indexing</a></li>
+    </ul>
+  </li>
+  <li><a href="#control-statements" 
id="markdown-toc-control-statements">Control Statements</a></li>
+  <li><a href="#user-defined-functions" 
id="markdown-toc-user-defined-functions">User-Defined Functions</a></li>
+  <li><a href="#command-line-arguments-and-default-values" 
id="markdown-toc-command-line-arguments-and-default-values">Command-Line 
Arguments and Default Values</a></li>
+  <li><a href="#additional-information" 
id="markdown-toc-additional-information">Additional Information</a></li>
+</ul>
+
+<p><br /></p>
+
+<h1 id="overview">Overview</h1>
+
+<p>SystemML enables <em>flexible</em>, scalable machine learning. This 
flexibility is achieved
+through the specification of a high-level declarative machine learning language
+that comes in two flavors, one with an R-like syntax (DML) and one with
+a Python-like syntax (PyDML).</p>
+
+<p>Algorithm scripts written in DML and PyDML can be run on Spark, on Hadoop, 
or
+in Standalone mode. SystemML also features an MLContext API that allows 
SystemML
+to be accessed via Scala or Python from a Spark Shell, a Jupyter Notebook, or 
a Zeppelin Notebook.</p>
+
+<p>This Beginner&#8217;s Guide serves as a starting point for writing DML and 
PyDML
+scripts.</p>
+
+<h1 id="script-invocation">Script Invocation</h1>
+
+<p>DML and PyDML scripts can be invoked in a variety of ways. Suppose that we 
have <code>hello.dml</code> and
+<code>hello.pydml</code> scripts containing the following:</p>
+
+<pre><code>print('hello ' + $1)
+</code></pre>
+
+<p>One way to begin working with SystemML is to <a 
href="http://systemml.apache.org/download.html";>download a binary distribution 
of SystemML</a>
+and use the <code>runStandaloneSystemML.sh</code> and 
<code>runStandaloneSystemML.bat</code> scripts to run SystemML in standalone
+mode. The name of the DML or PyDML script is passed as the first argument to 
these scripts,
+along with a variety of arguments. Note that PyDML invocation can be forced 
with the addition of a <code>-python</code> flag.</p>
+
+<pre><code>./runStandaloneSystemML.sh hello.dml -args world
+./runStandaloneSystemML.sh hello.pydml -args world
+</code></pre>
+
+<h1 id="data-types">Data Types</h1>
+
+<p>SystemML has four value data types. In DML, these are: 
<strong>double</strong>, <strong>integer</strong>,
+<strong>string</strong>, and <strong>boolean</strong>. In PyDML, these are: 
<strong>float</strong>, <strong>int</strong>,
+<strong>str</strong>, and <strong>bool</strong>. In normal usage, the data 
type of a variable is implicit
+based on its value. Mathematical operations typically operate on
+doubles/floats, whereas integers/ints are typically useful for tasks such as
+iteration and accessing elements in a matrix.</p>
+
+<div class="codetabs2">
+
+<div data-lang="DML">
+
+    <div class="highlight"><pre><code class="language-r" data-lang="r"><span 
class="n">aDouble</span><span class="w"> </span><span class="o">=</span><span 
class="w"> </span><span class="m">3.0</span><span class="w">
+</span><span class="n">bInteger</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="m">2</span><span 
class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="s1">'aDouble = '</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="n">aDouble</span><span 
class="p">)</span><span class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="s1">'bInteger = '</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="n">bInteger</span><span 
class="p">)</span><span class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="s1">'aDouble + bInteger = '</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="p">(</span><span 
class="n">aDouble</span><span class="w"> </span><span class="o">+</span><span 
class="w"> </span><span class="n">bInteger</span><span class="p">))</span><span 
class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="s1">'bInteger ^ 3 = '</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="p">(</span><span 
class="n">bInteger</span><span class="w"> </span><span class="o">^</span><span 
class="w"> </span><span class="m">3</span><span class="p">))</span><span 
class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="s1">'aDouble ^ 2 = '</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="p">(</span><span 
class="n">aDouble</span><span class="w"> </span><span class="o">^</span><span 
class="w"> </span><span class="m">2</span><span class="p">))</span><span 
class="w">
+
+</span><span class="n">cBoolean</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="kc">TRUE</span><span 
class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="s1">'cBoolean = '</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="n">cBoolean</span><span 
class="p">)</span><span class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="s1">'(2 &lt; 1) = '</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="p">(</span><span 
class="m">2</span><span class="w"> </span><span class="o">&lt;</span><span 
class="w"> </span><span class="m">1</span><span class="p">))</span><span 
class="w">
+
+</span><span class="n">dString</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="s1">'Hello'</span><span 
class="w">
+</span><span class="n">eString</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">dString</span><span 
class="w"> </span><span class="o">+</span><span class="w"> </span><span 
class="s1">' World'</span><span class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="s1">'dString = '</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="n">dString</span><span 
class="p">)</span><span class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="s1">'eString = '</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="n">eString</span><span 
class="p">)</span></code></pre></div>
+
+  </div>
+
+<div data-lang="PyDML">
+
+    <div class="highlight"><pre><code class="language-python" 
data-lang="python"><span class="n">aFloat</span> <span class="o">=</span> <span 
class="mf">3.0</span>
+<span class="n">bInt</span> <span class="o">=</span> <span class="mi">2</span>
+<span class="k">print</span><span class="p">(</span><span class="s">'aFloat = 
'</span> <span class="o">+</span> <span class="n">aFloat</span><span 
class="p">)</span>
+<span class="k">print</span><span class="p">(</span><span class="s">'bInt = 
'</span> <span class="o">+</span> <span class="n">bInt</span><span 
class="p">)</span>
+<span class="k">print</span><span class="p">(</span><span class="s">'aFloat + 
bInt = '</span> <span class="o">+</span> <span class="p">(</span><span 
class="n">aFloat</span> <span class="o">+</span> <span 
class="n">bInt</span><span class="p">))</span>
+<span class="k">print</span><span class="p">(</span><span class="s">'bInt ** 3 
= '</span> <span class="o">+</span> <span class="p">(</span><span 
class="n">bInt</span> <span class="o">**</span> <span class="mi">3</span><span 
class="p">))</span>
+<span class="k">print</span><span class="p">(</span><span class="s">'aFloat ** 
2 = '</span> <span class="o">+</span> <span class="p">(</span><span 
class="n">aFloat</span> <span class="o">**</span> <span 
class="mi">2</span><span class="p">))</span>
+
+<span class="n">cBool</span> <span class="o">=</span> <span 
class="bp">True</span>
+<span class="k">print</span><span class="p">(</span><span class="s">'cBool = 
'</span> <span class="o">+</span> <span class="n">cBool</span><span 
class="p">)</span>
+<span class="k">print</span><span class="p">(</span><span class="s">'(2 &lt; 
1) = '</span> <span class="o">+</span> <span class="p">(</span><span 
class="mi">2</span> <span class="o">&lt;</span> <span class="mi">1</span><span 
class="p">))</span>
+
+<span class="n">dStr</span> <span class="o">=</span> <span 
class="s">'Hello'</span>
+<span class="n">eStr</span> <span class="o">=</span> <span 
class="n">dStr</span> <span class="o">+</span> <span class="s">' World'</span>
+<span class="k">print</span><span class="p">(</span><span class="s">'dStr = 
'</span> <span class="o">+</span> <span class="n">dStr</span><span 
class="p">)</span>
+<span class="k">print</span><span class="p">(</span><span class="s">'eStr = 
'</span> <span class="o">+</span> <span class="n">eStr</span><span 
class="p">)</span></code></pre></div>
+
+  </div>
+
+<div data-lang="DML Result">
+    <pre><code>aDouble = 3.0
+bInteger = 2
+aDouble + bInteger = 5.0
+bInteger ^ 3 = 8.0
+aDouble ^ 2 = 9.0
+cBoolean = TRUE
+(2 &lt; 1) = FALSE
+dString = Hello
+eString = Hello World
+</code></pre>
+  </div>
+
+<div data-lang="PyDML Result">
+    <pre><code>aFloat = 3.0
+bInt = 2
+aFloat + bInt = 5.0
+bInt ** 3 = 8.0
+aFloat ** 2 = 9.0
+cBool = TRUE
+(2 &lt; 1) = FALSE
+dStr = Hello
+eStr = Hello World
+</code></pre>
+  </div>
+
+</div>
+
+<h1 id="matrix-basics">Matrix Basics</h1>
+
+<h2 id="creating-a-matrix">Creating a Matrix</h2>
+
+<p>A matrix can be created in DML using the 
<strong><code>matrix()</code></strong> function and in PyDML using the 
<strong><code>full()</code></strong> 
+function. In the example below, a matrix element is still considered to be of 
the matrix data type,
+so the value is cast to a scalar in order to print it. Matrix element values 
are of type <strong>double</strong>/<strong>float</strong>.</p>
+
+<div class="codetabs2">
+
+<div data-lang="DML">
+
+    <div class="highlight"><pre><code class="language-r" data-lang="r"><span 
class="n">m</span><span class="w"> </span><span class="o">=</span><span 
class="w"> </span><span class="n">matrix</span><span class="p">(</span><span 
class="s2">"1 2 3 4 5 6 7 8 9 10 11 12"</span><span class="p">,</span><span 
class="w"> </span><span class="n">rows</span><span class="o">=</span><span 
class="m">4</span><span class="p">,</span><span class="w"> </span><span 
class="n">cols</span><span class="o">=</span><span class="m">3</span><span 
class="p">)</span><span class="w">
+</span><span class="k">for</span><span class="w"> </span><span 
class="p">(</span><span class="n">i</span><span class="w"> </span><span 
class="k">in</span><span class="w"> </span><span class="m">1</span><span 
class="o">:</span><span class="n">nrow</span><span class="p">(</span><span 
class="n">m</span><span class="p">))</span><span class="w"> </span><span 
class="p">{</span><span class="w">
+    </span><span class="k">for</span><span class="w"> </span><span 
class="p">(</span><span class="n">j</span><span class="w"> </span><span 
class="k">in</span><span class="w"> </span><span class="m">1</span><span 
class="o">:</span><span class="n">ncol</span><span class="p">(</span><span 
class="n">m</span><span class="p">))</span><span class="w"> </span><span 
class="p">{</span><span class="w">
+        </span><span class="n">n</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">m</span><span 
class="p">[</span><span class="n">i</span><span class="p">,</span><span 
class="n">j</span><span class="p">]</span><span class="w">
+        </span><span class="n">print</span><span class="p">(</span><span 
class="s1">'['</span><span class="w"> </span><span class="o">+</span><span 
class="w"> </span><span class="n">i</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="s1">','</span><span 
class="w"> </span><span class="o">+</span><span class="w"> </span><span 
class="n">j</span><span class="w"> </span><span class="o">+</span><span 
class="w"> </span><span class="s1">']:'</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="n">as.scalar</span><span 
class="p">(</span><span class="n">n</span><span class="p">))</span><span 
class="w">
+    </span><span class="p">}</span><span class="w">
+</span><span class="p">}</span></code></pre></div>
+
+  </div>
+
+<div data-lang="PyDML">
+
+    <div class="highlight"><pre><code class="language-python" 
data-lang="python"><span class="n">m</span> <span class="o">=</span> <span 
class="n">full</span><span class="p">(</span><span class="s">"1 2 3 4 5 6 7 8 9 
10 11 12"</span><span class="p">,</span> <span class="n">rows</span><span 
class="o">=</span><span class="mi">4</span><span class="p">,</span> <span 
class="n">cols</span><span class="o">=</span><span class="mi">3</span><span 
class="p">)</span>
+<span class="k">for</span> <span class="p">(</span><span class="n">i</span> 
<span class="ow">in</span> <span class="mi">0</span><span 
class="p">:</span><span class="n">nrow</span><span class="p">(</span><span 
class="n">m</span><span class="p">)</span><span class="o">-</span><span 
class="mi">1</span><span class="p">):</span>
+    <span class="k">for</span> <span class="p">(</span><span 
class="n">j</span> <span class="ow">in</span> <span class="mi">0</span><span 
class="p">:</span><span class="n">ncol</span><span class="p">(</span><span 
class="n">m</span><span class="p">)</span><span class="o">-</span><span 
class="mi">1</span><span class="p">):</span>
+        <span class="n">n</span> <span class="o">=</span> <span 
class="n">m</span><span class="p">[</span><span class="n">i</span><span 
class="p">,</span><span class="n">j</span><span class="p">]</span>
+        <span class="k">print</span><span class="p">(</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">scalar</span><span class="p">(</span><span 
class="n">n</span><span class="p">))</span></code></pre></div>
+
+  </div>
+
+<div data-lang="DML Result">
+    <pre><code>[1,1]:1.0
+[1,2]:2.0
+[1,3]:3.0
+[2,1]:4.0
+[2,2]:5.0
+[2,3]:6.0
+[3,1]:7.0
+[3,2]:8.0
+[3,3]:9.0
+[4,1]:10.0
+[4,2]:11.0
+[4,3]:12.0
+</code></pre>
+  </div>
+
+<div data-lang="PyDML Result">
+    <pre><code>[0,0]:1.0
+[0,1]:2.0
+[0,2]:3.0
+[1,0]:4.0
+[1,1]:5.0
+[1,2]:6.0
+[2,0]:7.0
+[2,1]:8.0
+[2,2]:9.0
+[3,0]:10.0
+[3,1]:11.0
+[3,2]:12.0
+</code></pre>
+  </div>
+
+</div>
+
+<p>We can also output the matrix element values using the 
<strong><code>toString</code></strong> function:</p>
+
+<div class="codetabs2">
+
+<div data-lang="DML">
+
+    <div class="highlight"><pre><code class="language-r" data-lang="r"><span 
class="n">m</span><span class="w"> </span><span class="o">=</span><span 
class="w"> </span><span class="n">matrix</span><span class="p">(</span><span 
class="s2">"1 2 3 4 5 6 7 8 9 10 11 12"</span><span class="p">,</span><span 
class="w"> </span><span class="n">rows</span><span class="o">=</span><span 
class="m">4</span><span class="p">,</span><span class="w"> </span><span 
class="n">cols</span><span class="o">=</span><span class="m">3</span><span 
class="p">)</span><span class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">m</span><span 
class="p">,</span><span class="w"> </span><span class="n">sep</span><span 
class="o">=</span><span class="s2">" | "</span><span class="p">,</span><span 
class="w"> </span><span class="n">decimal</span><span class="o">=</span><span 
class="m">1</span><span class="p">))</span></code></pre></div>
+
+  </div>
+
+<div data-lang="PyDML">
+
+    <div class="highlight"><pre><code class="language-python" 
data-lang="python"><span class="n">m</span> <span class="o">=</span> <span 
class="n">full</span><span class="p">(</span><span class="s">"1 2 3 4 5 6 7 8 9 
10 11 12"</span><span class="p">,</span> <span class="n">rows</span><span 
class="o">=</span><span class="mi">4</span><span class="p">,</span> <span 
class="n">cols</span><span class="o">=</span><span class="mi">3</span><span 
class="p">)</span>
+<span class="k">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">m</span><span 
class="p">,</span> <span class="n">sep</span><span class="o">=</span><span 
class="s">" | "</span><span class="p">,</span> <span 
class="n">decimal</span><span class="o">=</span><span class="mi">1</span><span 
class="p">))</span></code></pre></div>
+
+  </div>
+
+<div data-lang="Result">
+    <pre><code>1.0 | 2.0 | 3.0
+4.0 | 5.0 | 6.0
+7.0 | 8.0 | 9.0
+10.0 | 11.0 | 12.0
+</code></pre>
+  </div>
+
+</div>
+
+<p>For additional information about the <strong><code>matrix()</code></strong> 
and <strong><code>full()</code></strong> functions, please see the 
+<a 
href="dml-language-reference.html#matrix-construction-manipulation-and-aggregation-built-in-functions">Matrix
 Construction</a>
+section of the Language Reference. For information about the 
<strong><code>toString()</code></strong> function, see
+the <a href="dml-language-reference.html#other-built-in-functions">Other 
Built-In Functions</a> section of the Language Reference.</p>
+
+<h2 id="saving-a-matrix">Saving a Matrix</h2>
+
+<p>A matrix can be saved using the <strong><code>write()</code></strong> 
function in DML and the <strong><code>save()</code></strong> function in PyDML. 
SystemML supports four
+different formats: <strong><code>text</code></strong> (<code>i,j,v</code>), 
<strong><code>mm</code></strong> (<code>Matrix Market</code>), 
<strong><code>csv</code></strong> (<code>delimiter-separated values</code>), 
and <strong><code>binary</code></strong>.</p>
+
+<div class="codetabs2">
+
+<div data-lang="DML">
+
+    <div class="highlight"><pre><code class="language-r" data-lang="r"><span 
class="n">m</span><span class="w"> </span><span class="o">=</span><span 
class="w"> </span><span class="n">matrix</span><span class="p">(</span><span 
class="s2">"1 2 3 0 0 0 7 8 9 0 0 0"</span><span class="p">,</span><span 
class="w"> </span><span class="n">rows</span><span class="o">=</span><span 
class="m">4</span><span class="p">,</span><span class="w"> </span><span 
class="n">cols</span><span class="o">=</span><span class="m">3</span><span 
class="p">)</span><span class="w">
+</span><span class="n">write</span><span class="p">(</span><span 
class="n">m</span><span class="p">,</span><span class="w"> </span><span 
class="s2">"m.txt"</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><span class="w">
+</span><span class="n">write</span><span class="p">(</span><span 
class="n">m</span><span class="p">,</span><span class="w"> </span><span 
class="s2">"m.mm"</span><span class="p">,</span><span class="w"> </span><span 
class="n">format</span><span class="o">=</span><span 
class="s2">"mm"</span><span class="p">)</span><span class="w">
+</span><span class="n">write</span><span class="p">(</span><span 
class="n">m</span><span class="p">,</span><span class="w"> </span><span 
class="s2">"m.csv"</span><span class="p">,</span><span class="w"> </span><span 
class="n">format</span><span class="o">=</span><span 
class="s2">"csv"</span><span class="p">)</span><span class="w">
+</span><span class="n">write</span><span class="p">(</span><span 
class="n">m</span><span class="p">,</span><span class="w"> </span><span 
class="s2">"m.binary"</span><span class="p">,</span><span class="w"> 
</span><span class="n">format</span><span class="o">=</span><span 
class="s2">"binary"</span><span class="p">)</span></code></pre></div>
+
+  </div>
+
+<div data-lang="PyDML">
+
+    <div class="highlight"><pre><code class="language-python" 
data-lang="python"><span class="n">m</span> <span class="o">=</span> <span 
class="n">full</span><span class="p">(</span><span class="s">"1 2 3 0 0 0 7 8 9 
0 0 0"</span><span class="p">,</span> <span class="n">rows</span><span 
class="o">=</span><span class="mi">4</span><span class="p">,</span> <span 
class="n">cols</span><span class="o">=</span><span class="mi">3</span><span 
class="p">)</span>
+<span class="n">save</span><span class="p">(</span><span 
class="n">m</span><span class="p">,</span> <span class="s">"m.txt"</span><span 
class="p">,</span> <span class="n">format</span><span class="o">=</span><span 
class="s">"text"</span><span class="p">)</span>
+<span class="n">save</span><span class="p">(</span><span 
class="n">m</span><span class="p">,</span> <span class="s">"m.mm"</span><span 
class="p">,</span> <span class="n">format</span><span class="o">=</span><span 
class="s">"mm"</span><span class="p">)</span>
+<span class="n">save</span><span class="p">(</span><span 
class="n">m</span><span class="p">,</span> <span class="s">"m.csv"</span><span 
class="p">,</span> <span class="n">format</span><span class="o">=</span><span 
class="s">"csv"</span><span class="p">)</span>
+<span class="n">save</span><span class="p">(</span><span 
class="n">m</span><span class="p">,</span> <span 
class="s">"m.binary"</span><span class="p">,</span> <span 
class="n">format</span><span class="o">=</span><span 
class="s">"binary"</span><span class="p">)</span></code></pre></div>
+
+  </div>
+
+</div>
+
+<p>Saving a matrix automatically creates a metadata file for each format 
except for Matrix Market, since Matrix Market contains
+metadata within the *.mm file. All formats are text-based except binary. The 
contents of the resulting files are shown here.
+<em>Note that the <strong><code>text</code></strong> (<code>i,j,v</code>) and 
<strong><code>mm</code></strong> (<code>Matrix Market</code>) formats index 
from 1, even when working with PyDML, which
+is 0-based.</em></p>
+
+<div class="codetabs2">
+
+<div data-lang="m.txt">
+    <pre><code>1 1 1.0
+1 2 2.0
+1 3 3.0
+3 1 7.0
+3 2 8.0
+3 3 9.0
+</code></pre>
+  </div>
+
+<div data-lang="m.txt.mtd">
+    <pre><code>{
+    "data_type": "matrix",
+    "value_type": "double",
+    "rows": 4,
+    "cols": 3,
+    "nnz": 6,
+    "format": "text",
+    "author": "SystemML",
+    "created": "2017-01-01 00:00:01 PST"
+}
+</code></pre>
+  </div>
+
+<div data-lang="m.mm">
+    <pre><code>%%MatrixMarket matrix coordinate real general
+4 3 6
+1 1 1.0
+1 2 2.0
+1 3 3.0
+3 1 7.0
+3 2 8.0
+3 3 9.0
+</code></pre>
+  </div>
+
+<div data-lang="m.csv">
+    <pre><code>1.0,2.0,3.0
+0,0,0
+7.0,8.0,9.0
+0,0,0
+</code></pre>
+  </div>
+
+<div data-lang="m.csv.mtd">
+    <pre><code>{
+    "data_type": "matrix",
+    "value_type": "double",
+    "rows": 4,
+    "cols": 3,
+    "nnz": 6,
+    "format": "csv",
+    "header": false,
+    "sep": ",",
+    "author": "SystemML",
+    "created": "2017-01-01 00:00:01 PST"
+}
+</code></pre>
+  </div>
+
+<div data-lang="m.binary">
+    <pre><code>Not text-based
+</code></pre>
+  </div>
+
+<div data-lang="m.binary.mtd">
+    <pre><code>{
+    "data_type": "matrix",
+    "value_type": "double",
+    "rows": 4,
+    "cols": 3,
+    "rows_in_block": 1000,
+    "cols_in_block": 1000,
+    "nnz": 6,
+    "format": "binary",
+    "author": "SystemML",
+    "created": "2017-01-01 00:00:01 PST"
+}
+</code></pre>
+  </div>
+
+</div>
+
+<h2 id="loading-a-matrix">Loading a Matrix</h2>
+
+<p>A matrix can be loaded using the <strong><code>read()</code></strong> 
function in DML and the <strong><code>load()</code></strong> function in PyDML. 
As with saving, SystemML supports four
+formats: <strong><code>text</code></strong> (<code>i,j,v</code>), 
<strong><code>mm</code></strong> (<code>Matrix Market</code>), 
<strong><code>csv</code></strong> (<code>delimiter-separated values</code>), 
and <strong><code>binary</code></strong>. To read a file, a corresponding
+metadata file is required, except for the Matrix Market format. A metadata 
file is not required if a <code>format</code> parameter is specified to the 
<strong><code>read()</code></strong>
+or <strong><code>load()</code></strong> functions.</p>
+
+<div class="codetabs2">
+
+<div data-lang="DML">
+
+    <div class="highlight"><pre><code class="language-r" data-lang="r"><span 
class="n">m</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">"m.csv"</span><span class="p">)</span><span class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="s2">"min:"</span><span class="w"> </span><span class="o">+</span><span 
class="w"> </span><span class="nf">min</span><span class="p">(</span><span 
class="n">m</span><span class="p">))</span><span class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="s2">"max:"</span><span class="w"> </span><span class="o">+</span><span 
class="w"> </span><span class="nf">max</span><span class="p">(</span><span 
class="n">m</span><span class="p">))</span><span class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="s2">"sum:"</span><span class="w"> </span><span class="o">+</span><span 
class="w"> </span><span class="nf">sum</span><span class="p">(</span><span 
class="n">m</span><span class="p">))</span><span class="w">
+</span><span class="n">mRowSums</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">rowSums</span><span 
class="p">(</span><span class="n">m</span><span class="p">)</span><span 
class="w">
+</span><span class="k">for</span><span class="w"> </span><span 
class="p">(</span><span class="n">i</span><span class="w"> </span><span 
class="k">in</span><span class="w"> </span><span class="m">1</span><span 
class="o">:</span><span class="n">nrow</span><span class="p">(</span><span 
class="n">mRowSums</span><span class="p">))</span><span class="w"> </span><span 
class="p">{</span><span class="w">
+    </span><span class="n">print</span><span class="p">(</span><span 
class="s2">"row "</span><span class="w"> </span><span class="o">+</span><span 
class="w"> </span><span class="n">i</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="s2">" sum:"</span><span 
class="w"> </span><span class="o">+</span><span class="w"> </span><span 
class="n">as.scalar</span><span class="p">(</span><span 
class="n">mRowSums</span><span class="p">[</span><span class="n">i</span><span 
class="p">,</span><span class="m">1</span><span class="p">]))</span><span 
class="w">
+</span><span class="p">}</span><span class="w">
+</span><span class="n">mColSums</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">colSums</span><span 
class="p">(</span><span class="n">m</span><span class="p">)</span><span 
class="w">
+</span><span class="k">for</span><span class="w"> </span><span 
class="p">(</span><span class="n">i</span><span class="w"> </span><span 
class="k">in</span><span class="w"> </span><span class="m">1</span><span 
class="o">:</span><span class="n">ncol</span><span class="p">(</span><span 
class="n">mColSums</span><span class="p">))</span><span class="w"> </span><span 
class="p">{</span><span class="w">
+    </span><span class="n">print</span><span class="p">(</span><span 
class="s2">"col "</span><span class="w"> </span><span class="o">+</span><span 
class="w"> </span><span class="n">i</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="s2">" sum:"</span><span 
class="w"> </span><span class="o">+</span><span class="w"> </span><span 
class="n">as.scalar</span><span class="p">(</span><span 
class="n">mColSums</span><span class="p">[</span><span class="m">1</span><span 
class="p">,</span><span class="n">i</span><span class="p">]))</span><span 
class="w">
+</span><span class="p">}</span></code></pre></div>
+
+  </div>
+
+<div data-lang="PyDML">
+
+    <div class="highlight"><pre><code class="language-python" 
data-lang="python"><span class="n">m</span> <span class="o">=</span> <span 
class="n">load</span><span class="p">(</span><span 
class="s">"m.csv"</span><span class="p">)</span>
+<span class="k">print</span><span class="p">(</span><span 
class="s">"min:"</span> <span class="o">+</span> <span 
class="nb">min</span><span class="p">(</span><span class="n">m</span><span 
class="p">))</span>
+<span class="k">print</span><span class="p">(</span><span 
class="s">"max:"</span> <span class="o">+</span> <span 
class="nb">max</span><span class="p">(</span><span class="n">m</span><span 
class="p">))</span>
+<span class="k">print</span><span class="p">(</span><span 
class="s">"sum:"</span> <span class="o">+</span> <span 
class="nb">sum</span><span class="p">(</span><span class="n">m</span><span 
class="p">))</span>
+<span class="n">mRowSums</span> <span class="o">=</span> <span 
class="n">rowSums</span><span class="p">(</span><span class="n">m</span><span 
class="p">)</span>
+<span class="k">for</span> <span class="p">(</span><span class="n">i</span> 
<span class="ow">in</span> <span class="mi">0</span><span 
class="p">:</span><span class="n">nrow</span><span class="p">(</span><span 
class="n">mRowSums</span><span class="p">)</span><span class="o">-</span><span 
class="mi">1</span><span class="p">):</span>
+    <span class="k">print</span><span class="p">(</span><span class="s">"row 
"</span> <span class="o">+</span> <span class="n">i</span> <span 
class="o">+</span> <span class="s">" sum:"</span> <span class="o">+</span> 
<span class="n">scalar</span><span class="p">(</span><span 
class="n">mRowSums</span><span class="p">[</span><span class="n">i</span><span 
class="p">,</span><span class="mi">0</span><span class="p">]))</span>
+<span class="n">mColSums</span> <span class="o">=</span> <span 
class="n">colSums</span><span class="p">(</span><span class="n">m</span><span 
class="p">)</span>
+<span class="k">for</span> <span class="p">(</span><span class="n">i</span> 
<span class="ow">in</span> <span class="mi">0</span><span 
class="p">:</span><span class="n">ncol</span><span class="p">(</span><span 
class="n">mColSums</span><span class="p">)</span><span class="o">-</span><span 
class="mi">1</span><span class="p">):</span>
+    <span class="k">print</span><span class="p">(</span><span class="s">"col 
"</span> <span class="o">+</span> <span class="n">i</span> <span 
class="o">+</span> <span class="s">" sum:"</span> <span class="o">+</span> 
<span class="n">scalar</span><span class="p">(</span><span 
class="n">mColSums</span><span class="p">[</span><span class="mi">0</span><span 
class="p">,</span><span class="n">i</span><span 
class="p">]))</span></code></pre></div>
+
+  </div>
+
+<div data-lang="DML Result">
+    <pre><code>min:0.0
+max:9.0
+sum:30.0
+row 1 sum:6.0
+row 2 sum:0.0
+row 3 sum:24.0
+row 4 sum:0.0
+col 1 sum:8.0
+col 2 sum:10.0
+col 3 sum:12.0
+</code></pre>
+  </div>
+
+<div data-lang="PyDML Result">
+    <pre><code>min:0.0
+max:9.0
+sum:30.0
+row 0 sum:6.0
+row 1 sum:0.0
+row 2 sum:24.0
+row 3 sum:0.0
+col 0 sum:8.0
+col 1 sum:10.0
+col 2 sum:12.0
+</code></pre>
+  </div>
+
+</div>
+
+<h2 id="matrix-operations">Matrix Operations</h2>
+
+<p>DML and PyDML offer a rich set of operators and built-in functions to 
perform various operations on matrices and scalars.
+Operators and built-in functions are described in great detail in the Language 
Reference
+(<a href="dml-language-reference.html#expressions">Expressions</a>, <a 
href="dml-language-reference.html#built-in-functions">Built-In 
Functions</a>).</p>
+
+<p>In this example, we create a matrix A. Next, we create another matrix B by 
adding 4 to each element in A. Next, we flip
+B by taking its transpose. We then multiply A and B, represented by matrix C. 
We create a matrix D with the same number
+of rows and columns as C, and initialize its elements to 5. We then subtract D 
from C and divide the values of its elements
+by 2 and assign the resulting matrix to D.</p>
+
+<div class="codetabs2">
+
+<div data-lang="DML">
+
+    <div class="highlight"><pre><code class="language-r" data-lang="r"><span 
class="n">A</span><span class="w"> </span><span class="o">=</span><span 
class="w"> </span><span class="n">matrix</span><span class="p">(</span><span 
class="s2">"1 2 3 4 5 6"</span><span class="p">,</span><span class="w"> 
</span><span class="n">rows</span><span class="o">=</span><span 
class="m">3</span><span class="p">,</span><span class="w"> </span><span 
class="n">cols</span><span class="o">=</span><span class="m">2</span><span 
class="p">)</span><span class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">A</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">A</span><span 
class="w"> </span><span class="o">+</span><span class="w"> </span><span 
class="m">4</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">t</span><span 
class="p">(</span><span class="n">B</span><span class="p">)</span><span 
class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">B</span><span 
class="p">))</span><span class="w">
+</span><span class="n">C</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">A</span><span 
class="w"> </span><span class="o">%*%</span><span class="w"> </span><span 
class="n">B</span><span class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">C</span><span 
class="p">))</span><span class="w">
+</span><span class="n">D</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">matrix</span><span 
class="p">(</span><span class="m">5</span><span class="p">,</span><span 
class="w"> </span><span class="n">rows</span><span class="o">=</span><span 
class="n">nrow</span><span class="p">(</span><span class="n">C</span><span 
class="p">),</span><span class="w"> </span><span class="n">cols</span><span 
class="o">=</span><span class="n">ncol</span><span class="p">(</span><span 
class="n">C</span><span class="p">))</span><span class="w">
+</span><span class="n">D</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="p">(</span><span 
class="n">C</span><span class="w"> </span><span class="o">-</span><span 
class="w"> </span><span class="n">D</span><span class="p">)</span><span 
class="w"> </span><span class="o">/</span><span class="w"> </span><span 
class="m">2</span><span class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">D</span><span 
class="p">))</span></code></pre></div>
+
+  </div>
+
+<div data-lang="PyDML">
+
+    <div class="highlight"><pre><code class="language-python" 
data-lang="python"><span class="n">A</span> <span class="o">=</span> <span 
class="n">full</span><span class="p">(</span><span class="s">"1 2 3 4 5 
6"</span><span class="p">,</span> <span class="n">rows</span><span 
class="o">=</span><span class="mi">3</span><span class="p">,</span> <span 
class="n">cols</span><span class="o">=</span><span class="mi">2</span><span 
class="p">)</span>
+<span class="k">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">A</span><span 
class="p">))</span>
+<span class="n">B</span> <span class="o">=</span> <span class="n">A</span> 
<span class="o">+</span> <span class="mi">4</span>
+<span class="n">B</span> <span class="o">=</span> <span 
class="n">transpose</span><span class="p">(</span><span class="n">B</span><span 
class="p">)</span>
+<span class="k">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">B</span><span 
class="p">))</span>
+<span class="n">C</span> <span class="o">=</span> <span 
class="n">dot</span><span class="p">(</span><span class="n">A</span><span 
class="p">,</span> <span class="n">B</span><span class="p">)</span>
+<span class="k">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">C</span><span 
class="p">))</span>
+<span class="n">D</span> <span class="o">=</span> <span 
class="n">full</span><span class="p">(</span><span class="mi">5</span><span 
class="p">,</span> <span class="n">rows</span><span class="o">=</span><span 
class="n">nrow</span><span class="p">(</span><span class="n">C</span><span 
class="p">),</span> <span class="n">cols</span><span class="o">=</span><span 
class="n">ncol</span><span class="p">(</span><span class="n">C</span><span 
class="p">))</span>
+<span class="n">D</span> <span class="o">=</span> <span 
class="p">(</span><span class="n">C</span> <span class="o">-</span> <span 
class="n">D</span><span class="p">)</span> <span class="o">/</span> <span 
class="mi">2</span>
+<span class="k">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">D</span><span 
class="p">))</span></code></pre></div>
+
+  </div>
+
+<div data-lang="Result">
+    <pre><code>1.000 2.000
+3.000 4.000
+5.000 6.000
+
+5.000 7.000 9.000
+6.000 8.000 10.000
+
+17.000 23.000 29.000
+39.000 53.000 67.000
+61.000 83.000 105.000
+
+6.000 9.000 12.000
+17.000 24.000 31.000
+28.000 39.000 50.000
+</code></pre>
+  </div>
+
+</div>
+
+<h2 id="matrix-indexing">Matrix Indexing</h2>
+
+<p>The elements in a matrix can be accessed by their row and column indices. 
In the example below, we have 3x3 matrix A.
+First, we access the element at the third row and third column. Next, we 
obtain a row slice (vector) of the matrix by
+specifying the row and leaving the column blank. We obtain a column slice 
(vector) by leaving the row blank and specifying
+the column. After that, we obtain a submatrix via range indexing, where we 
specify rows, separated by a colon, and columns,
+separated by a colon.</p>
+
+<div class="codetabs2">
+
+<div data-lang="DML">
+
+    <div class="highlight"><pre><code class="language-r" data-lang="r"><span 
class="n">A</span><span class="w"> </span><span class="o">=</span><span 
class="w"> </span><span class="n">matrix</span><span class="p">(</span><span 
class="s2">"1 2 3 4 5 6 7 8 9"</span><span class="p">,</span><span class="w"> 
</span><span class="n">rows</span><span class="o">=</span><span 
class="m">3</span><span class="p">,</span><span class="w"> </span><span 
class="n">cols</span><span class="o">=</span><span class="m">3</span><span 
class="p">)</span><span class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">A</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">A</span><span 
class="p">[</span><span class="m">3</span><span class="p">,</span><span 
class="m">3</span><span class="p">]</span><span class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">B</span><span 
class="p">))</span><span class="w">
+</span><span class="n">C</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">A</span><span 
class="p">[</span><span class="m">2</span><span class="p">,]</span><span 
class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">C</span><span 
class="p">))</span><span class="w">
+</span><span class="n">D</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">A</span><span 
class="p">[,</span><span class="m">3</span><span class="p">]</span><span 
class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">D</span><span 
class="p">))</span><span class="w">
+</span><span class="n">E</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">A</span><span 
class="p">[</span><span class="m">2</span><span class="o">:</span><span 
class="m">3</span><span class="p">,</span><span class="m">1</span><span 
class="o">:</span><span class="m">2</span><span class="p">]</span><span 
class="w">
+</span><span class="n">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">E</span><span 
class="p">))</span></code></pre></div>
+
+  </div>
+
+<div data-lang="PyDML">
+
+    <div class="highlight"><pre><code class="language-python" 
data-lang="python"><span class="n">A</span> <span class="o">=</span> <span 
class="n">full</span><span class="p">(</span><span class="s">"1 2 3 4 5 6 7 8 
9"</span><span class="p">,</span> <span class="n">rows</span><span 
class="o">=</span><span class="mi">3</span><span class="p">,</span> <span 
class="n">cols</span><span class="o">=</span><span class="mi">3</span><span 
class="p">)</span>
+<span class="k">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">A</span><span 
class="p">))</span>
+<span class="n">B</span> <span class="o">=</span> <span 
class="n">A</span><span class="p">[</span><span class="mi">2</span><span 
class="p">,</span><span class="mi">2</span><span class="p">]</span>
+<span class="k">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">B</span><span 
class="p">))</span>
+<span class="n">C</span> <span class="o">=</span> <span 
class="n">A</span><span class="p">[</span><span class="mi">1</span><span 
class="p">,]</span>
+<span class="k">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">C</span><span 
class="p">))</span>
+<span class="n">D</span> <span class="o">=</span> <span 
class="n">A</span><span class="p">[,</span><span class="mi">2</span><span 
class="p">]</span>
+<span class="k">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">D</span><span 
class="p">))</span>
+<span class="n">E</span> <span class="o">=</span> <span 
class="n">A</span><span class="p">[</span><span class="mi">1</span><span 
class="p">:</span><span class="mi">3</span><span class="p">,</span><span 
class="mi">0</span><span class="p">:</span><span class="mi">2</span><span 
class="p">]</span>
+<span class="k">print</span><span class="p">(</span><span 
class="n">toString</span><span class="p">(</span><span class="n">E</span><span 
class="p">))</span></code></pre></div>
+
+  </div>
+
+<div data-lang="Result">
+    <pre><code>1.000 2.000 3.000
+4.000 5.000 6.000
+7.000 8.000 9.000
+
+9.000
+
+4.000 5.000 6.000
+
+3.000
+6.000
+9.000
+
+4.000 5.000
+7.000 8.000
+</code></pre>
+
+  </div>
+
+</div>
+
+<h1 id="control-statements">Control Statements</h1>
+
+<p>DML and PyDML both feature <code>if</code>, <code>if-else</code>, and 
<code>if-else-if</code> conditional statements.</p>
+
+<p>DML and PyDML feature 3 loop statements: <code>while</code>, 
<code>for</code>, and <code>parfor</code> (parallel for). In the example, note 
that the 
+<code>print</code> statements within the <code>parfor</code> loop can occur in 
any order since the iterations occur in parallel rather than
+sequentially as in a regular <code>for</code> loop. The <code>parfor</code> 
statement can include several optional parameters, as described
+in the Language Reference (<a 
href="dml-language-reference.html#parfor-statement">ParFor Statement</a>).</p>
+
+<div class="codetabs2">
+
+<div data-lang="DML">
+
+    <div class="highlight"><pre><code class="language-r" data-lang="r"><span 
class="n">i</span><span class="w"> </span><span class="o">=</span><span 
class="w"> </span><span class="m">1</span><span class="w">
+</span><span class="k">while</span><span class="w"> </span><span 
class="p">(</span><span class="n">i</span><span class="w"> </span><span 
class="o">&lt;=</span><span class="w"> </span><span class="m">3</span><span 
class="p">)</span><span class="w"> </span><span class="p">{</span><span 
class="w">
+    </span><span class="k">if</span><span class="w"> </span><span 
class="p">(</span><span class="n">i</span><span class="w"> </span><span 
class="o">==</span><span class="w"> </span><span class="m">1</span><span 
class="p">)</span><span class="w"> </span><span class="p">{</span><span 
class="w">
+        </span><span class="n">print</span><span class="p">(</span><span 
class="s1">'hello'</span><span class="p">)</span><span class="w">
+    </span><span class="p">}</span><span class="w"> </span><span 
class="k">else</span><span class="w"> </span><span class="k">if</span><span 
class="w"> </span><span class="p">(</span><span class="n">i</span><span 
class="w"> </span><span class="o">==</span><span class="w"> </span><span 
class="m">2</span><span class="p">)</span><span class="w"> </span><span 
class="p">{</span><span class="w">
+        </span><span class="n">print</span><span class="p">(</span><span 
class="s1">'world'</span><span class="p">)</span><span class="w">
+    </span><span class="p">}</span><span class="w"> </span><span 
class="k">else</span><span class="w"> </span><span class="p">{</span><span 
class="w">
+        </span><span class="n">print</span><span class="p">(</span><span 
class="s1">'!!!'</span><span class="p">)</span><span class="w">
+    </span><span class="p">}</span><span class="w">
+    </span><span class="n">i</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">i</span><span 
class="w"> </span><span class="o">+</span><span class="w"> </span><span 
class="m">1</span><span class="w">
+</span><span class="p">}</span><span class="w">
+
+</span><span class="n">A</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">matrix</span><span 
class="p">(</span><span class="s2">"1 2 3 4 5 6"</span><span 
class="p">,</span><span class="w"> </span><span class="n">rows</span><span 
class="o">=</span><span class="m">3</span><span class="p">,</span><span 
class="w"> </span><span class="n">cols</span><span class="o">=</span><span 
class="m">2</span><span class="p">)</span><span class="w">
+
+</span><span class="k">for</span><span class="w"> </span><span 
class="p">(</span><span class="n">i</span><span class="w"> </span><span 
class="k">in</span><span class="w"> </span><span class="m">1</span><span 
class="o">:</span><span class="n">nrow</span><span class="p">(</span><span 
class="n">A</span><span class="p">))</span><span class="w"> </span><span 
class="p">{</span><span class="w">
+    </span><span class="n">print</span><span class="p">(</span><span 
class="s2">"for A["</span><span class="w"> </span><span class="o">+</span><span 
class="w"> </span><span class="n">i</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="s2">",1]:"</span><span 
class="w"> </span><span class="o">+</span><span class="w"> </span><span 
class="n">as.scalar</span><span class="p">(</span><span class="n">A</span><span 
class="p">[</span><span class="n">i</span><span class="p">,</span><span 
class="m">1</span><span class="p">]))</span><span class="w">
+</span><span class="p">}</span><span class="w">
+
+</span><span class="n">parfor</span><span class="p">(</span><span 
class="n">i</span><span class="w"> </span><span class="k">in</span><span 
class="w"> </span><span class="m">1</span><span class="o">:</span><span 
class="n">nrow</span><span class="p">(</span><span class="n">A</span><span 
class="p">))</span><span class="w"> </span><span class="p">{</span><span 
class="w">
+    </span><span class="n">print</span><span class="p">(</span><span 
class="s2">"parfor A["</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="n">i</span><span 
class="w"> </span><span class="o">+</span><span class="w"> </span><span 
class="s2">",1]:"</span><span class="w"> </span><span class="o">+</span><span 
class="w"> </span><span class="n">as.scalar</span><span class="p">(</span><span 
class="n">A</span><span class="p">[</span><span class="n">i</span><span 
class="p">,</span><span class="m">1</span><span class="p">]))</span><span 
class="w">
+</span><span class="p">}</span></code></pre></div>
+
+  </div>
+
+<div data-lang="PyDML">
+
+    <div class="highlight"><pre><code class="language-python" 
data-lang="python"><span class="n">i</span> <span class="o">=</span> <span 
class="mi">1</span>
+<span class="k">while</span> <span class="p">(</span><span class="n">i</span> 
<span class="o">&lt;=</span> <span class="mi">3</span><span class="p">):</span>
+    <span class="k">if</span> <span class="p">(</span><span class="n">i</span> 
<span class="o">==</span> <span class="mi">1</span><span class="p">):</span>
+        <span class="k">print</span><span class="p">(</span><span 
class="s">'hello'</span><span class="p">)</span>
+    <span class="k">elif</span> <span class="p">(</span><span 
class="n">i</span> <span class="o">==</span> <span class="mi">2</span><span 
class="p">):</span>
+        <span class="k">print</span><span class="p">(</span><span 
class="s">'world'</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="k">print</span><span class="p">(</span><span 
class="s">'!!!'</span><span class="p">)</span>
+    <span class="n">i</span> <span class="o">=</span> <span class="n">i</span> 
<span class="o">+</span> <span class="mi">1</span>
+
+<span class="n">A</span> <span class="o">=</span> <span 
class="n">full</span><span class="p">(</span><span class="s">"1 2 3 4 5 
6"</span><span class="p">,</span> <span class="n">rows</span><span 
class="o">=</span><span class="mi">3</span><span class="p">,</span> <span 
class="n">cols</span><span class="o">=</span><span class="mi">2</span><span 
class="p">)</span>
+
+<span class="k">for</span> <span class="p">(</span><span class="n">i</span> 
<span class="ow">in</span> <span class="mi">0</span><span 
class="p">:</span><span class="n">nrow</span><span class="p">(</span><span 
class="n">A</span><span class="p">)</span><span class="o">-</span><span 
class="mi">1</span><span class="p">):</span>
+    <span class="k">print</span><span class="p">(</span><span class="s">"for 
A["</span> <span class="o">+</span> <span class="n">i</span> <span 
class="o">+</span> <span class="s">",0]:"</span> <span class="o">+</span> <span 
class="n">scalar</span><span class="p">(</span><span class="n">A</span><span 
class="p">[</span><span class="n">i</span><span class="p">,</span><span 
class="mi">0</span><span class="p">]))</span>
+
+<span class="n">parfor</span><span class="p">(</span><span class="n">i</span> 
<span class="ow">in</span> <span class="mi">0</span><span 
class="p">:</span><span class="n">nrow</span><span class="p">(</span><span 
class="n">A</span><span class="p">)</span><span class="o">-</span><span 
class="mi">1</span><span class="p">):</span>
+    <span class="k">print</span><span class="p">(</span><span 
class="s">"parfor A["</span> <span class="o">+</span> <span class="n">i</span> 
<span class="o">+</span> <span class="s">",0]:"</span> <span class="o">+</span> 
<span class="n">scalar</span><span class="p">(</span><span 
class="n">A</span><span class="p">[</span><span class="n">i</span><span 
class="p">,</span><span class="mi">0</span><span 
class="p">]))</span></code></pre></div>
+
+  </div>
+
+<div data-lang="DML Result">
+    <pre><code>hello
+world
+!!!
+for A[1,1]:1.0
+for A[2,1]:3.0
+for A[3,1]:5.0
+parfor A[2,1]:3.0
+parfor A[1,1]:1.0
+parfor A[3,1]:5.0
+</code></pre>
+  </div>
+
+<div data-lang="PyDML Result">
+    <pre><code>hello
+world
+!!!
+for A[0,0]:1.0
+for A[1,0]:3.0
+for A[2,0]:5.0
+parfor A[0,0]:1.0
+parfor A[2,0]:5.0
+parfor A[1,0]:3.0
+</code></pre>
+  </div>
+
+</div>
+
+<h1 id="user-defined-functions">User-Defined Functions</h1>
+
+<p>Functions encapsulate useful functionality in SystemML. In addition to 
built-in functions, users can define their own functions.
+Functions take 0 or more parameters and return 0 or more values.</p>
+
+<div class="codetabs2">
+
+<div data-lang="DML">
+
+    <div class="highlight"><pre><code class="language-r" data-lang="r"><span 
class="n">doSomething</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="k">function</span><span 
class="p">(</span><span class="n">matrix</span><span class="p">[</span><span 
class="n">double</span><span class="p">]</span><span class="w"> </span><span 
class="n">mat</span><span class="p">)</span><span class="w"> </span><span 
class="n">return</span><span class="w"> </span><span class="p">(</span><span 
class="n">matrix</span><span class="p">[</span><span 
class="n">double</span><span class="p">]</span><span class="w"> </span><span 
class="n">ret</span><span class="p">)</span><span class="w"> </span><span 
class="p">{</span><span class="w">
+    </span><span class="n">additionalCol</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">matrix</span><span 
class="p">(</span><span class="m">1</span><span class="p">,</span><span 
class="w"> </span><span class="n">rows</span><span class="o">=</span><span 
class="n">nrow</span><span class="p">(</span><span class="n">mat</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="c1"># 1x3 matrix with 1 values</span><span 
class="w">
+    </span><span class="n">ret</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">cbind</span><span 
class="p">(</span><span class="n">mat</span><span class="p">,</span><span 
class="w"> </span><span class="n">additionalCol</span><span 
class="p">)</span><span class="w"> </span><span class="c1"># concatenate column 
to matrix</span><span class="w">
+    </span><span class="n">ret</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">cbind</span><span 
class="p">(</span><span class="n">ret</span><span class="p">,</span><span 
class="w"> </span><span class="n">seq</span><span class="p">(</span><span 
class="m">0</span><span class="p">,</span><span class="w"> </span><span 
class="m">2</span><span class="p">,</span><span class="w"> </span><span 
class="m">1</span><span class="p">))</span><span class="w">  </span><span 
class="c1"># concatenate column (0,1,2) to matrix</span><span class="w">
+    </span><span class="n">ret</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">cbind</span><span 
class="p">(</span><span class="n">ret</span><span class="p">,</span><span 
class="w"> </span><span class="n">rowMaxs</span><span class="p">(</span><span 
class="n">ret</span><span class="p">))</span><span class="w">  </span><span 
class="c1"># concatenate column of max row values to matrix</span><span 
class="w">
+    </span><span class="n">ret</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">cbind</span><span 
class="p">(</span><span class="n">ret</span><span class="p">,</span><span 
class="w"> </span><span class="n">rowSums</span><span class="p">(</span><span 
class="n">ret</span><span class="p">))</span><span class="w">  </span><span 
class="c1"># concatenate column of row sums to matrix</span><span class="w">
+</span><span class="p">}</span><span class="w">
+
+</span><span class="n">A</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">rand</span><span 
class="p">(</span><span class="n">rows</span><span class="o">=</span><span 
class="m">3</span><span class="p">,</span><span class="w"> </span><span 
class="n">cols</span><span class="o">=</span><span class="m">2</span><span 
class="p">,</span><span class="w"> </span><span class="n">min</span><span 
class="o">=</span><span class="m">0</span><span class="p">,</span><span 
class="w"> </span><span class="n">max</span><span class="o">=</span><span 
class="m">2</span><span class="p">)</span><span class="w"> </span><span 
class="c1"># random 3x2 matrix with values 0 to 2</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">doSomething</span><span class="p">(</span><span 
class="n">A</span><span class="p">)</span><span class="w">
+</span><span class="n">write</span><span class="p">(</span><span 
class="n">A</span><span class="p">,</span><span class="w"> </span><span 
class="s2">"A.csv"</span><span class="p">,</span><span class="w"> </span><span 
class="n">format</span><span class="o">=</span><span 
class="s2">"csv"</span><span class="p">)</span><span class="w">
+</span><span class="n">write</span><span class="p">(</span><span 
class="n">B</span><span class="p">,</span><span class="w"> </span><span 
class="s2">"B.csv"</span><span class="p">,</span><span class="w"> </span><span 
class="n">format</span><span class="o">=</span><span 
class="s2">"csv"</span><span class="p">)</span></code></pre></div>
+
+  </div>
+
+<div data-lang="PyDML">
+
+    <div class="highlight"><pre><code class="language-python" 
data-lang="python"><span class="k">def</span> <span 
class="nf">doSomething</span><span class="p">(</span><span 
class="n">mat</span><span class="p">:</span> <span class="n">matrix</span><span 
class="p">[</span><span class="nb">float</span><span class="p">])</span> <span 
class="o">-&gt;</span> <span class="p">(</span><span class="n">ret</span><span 
class="p">:</span> <span class="n">matrix</span><span class="p">[</span><span 
class="nb">float</span><span class="p">]):</span>
+    <span class="n">additionalCol</span> <span class="o">=</span> <span 
class="n">full</span><span class="p">(</span><span class="mi">1</span><span 
class="p">,</span> <span class="n">rows</span><span class="o">=</span><span 
class="n">nrow</span><span class="p">(</span><span class="n">mat</span><span 
class="p">),</span> <span class="n">cols</span><span class="o">=</span><span 
class="mi">1</span><span class="p">)</span> <span class="c"># 1x3 matrix with 1 
values</span>
+    <span class="n">ret</span> <span class="o">=</span> <span 
class="n">cbind</span><span class="p">(</span><span class="n">mat</span><span 
class="p">,</span> <span class="n">additionalCol</span><span class="p">)</span> 
<span class="c"># concatenate column to matrix</span>
+    <span class="n">ret</span> <span class="o">=</span> <span 
class="n">cbind</span><span class="p">(</span><span class="n">ret</span><span 
class="p">,</span> <span class="n">seq</span><span class="p">(</span><span 
class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span 
class="p">,</span> <span class="mi">1</span><span class="p">))</span>  <span 
class="c"># concatenate column (0,1,2) to matrix</span>
+    <span class="n">ret</span> <span class="o">=</span> <span 
class="n">cbind</span><span class="p">(</span><span class="n">ret</span><span 
class="p">,</span> <span class="n">rowMaxs</span><span class="p">(</span><span 
class="n">ret</span><span class="p">))</span>  <span class="c"># concatenate 
column of max row values to matrix</span>
+    <span class="n">ret</span> <span class="o">=</span> <span 
class="n">cbind</span><span class="p">(</span><span class="n">ret</span><span 
class="p">,</span> <span class="n">rowSums</span><span class="p">(</span><span 
class="n">ret</span><span class="p">))</span>  <span class="c"># concatenate 
column of row sums to matrix</span>
+
+<span class="n">A</span> <span class="o">=</span> <span 
class="n">rand</span><span class="p">(</span><span class="n">rows</span><span 
class="o">=</span><span class="mi">3</span><span class="p">,</span> <span 
class="n">cols</span><span class="o">=</span><span class="mi">2</span><span 
class="p">,</span> <span class="nb">min</span><span class="o">=</span><span 
class="mi">0</span><span class="p">,</span> <span class="nb">max</span><span 
class="o">=</span><span class="mi">2</span><span class="p">)</span> <span 
class="c"># random 3x2 matrix with values 0 to 2</span>
+<span class="n">B</span> <span class="o">=</span> <span 
class="n">doSomething</span><span class="p">(</span><span 
class="n">A</span><span class="p">)</span>
+<span class="n">save</span><span class="p">(</span><span 
class="n">A</span><span class="p">,</span> <span class="s">"A.csv"</span><span 
class="p">,</span> <span class="n">format</span><span class="o">=</span><span 
class="s">"csv"</span><span class="p">)</span>
+<span class="n">save</span><span class="p">(</span><span 
class="n">B</span><span class="p">,</span> <span class="s">"B.csv"</span><span 
class="p">,</span> <span class="n">format</span><span class="o">=</span><span 
class="s">"csv"</span><span class="p">)</span></code></pre></div>
+
+  </div>
+
+</div>
+
+<p>In the above example, a 3x2 matrix of random doubles between 0 and 2 is 
created using the <strong><code>rand()</code></strong> function.
+Additional parameters can be passed to <strong><code>rand()</code></strong> to 
control sparsity and other matrix characteristics.</p>
+
+<p>Matrix A is passed to the <code>doSomething</code> function. A column of 1 
values is concatenated to the matrix. A column
+consisting of the values <code>(0, 1, 2)</code> is concatenated to the matrix. 
Next, a column consisting of the maximum row values
+is concatenated to the matrix. A column consisting of the row sums is 
concatenated to the matrix, and this resulting
+matrix is returned to variable B. Matrix A is output to the <code>A.csv</code> 
file and matrix B is saved as the <code>B.csv</code> file.</p>
+
+<div class="codetabs2">
+
+<div data-lang="A.csv">
+    <pre><code>1.6091961493071,0.7088614208099939
+0.5984862383600267,1.5732118950764993
+0.2947607068519842,1.9081406573366781
+</code></pre>
+  </div>
+
+<div data-lang="B.csv">
+    
<pre><code>1.6091961493071,0.7088614208099939,1.0,0,1.6091961493071,4.927253719424194
+0.5984862383600267,1.5732118950764993,1.0,1.0,1.5732118950764993,5.744910028513026
+0.2947607068519842,1.9081406573366781,1.0,2.0,2.0,7.202901364188662
+</code></pre>
+  </div>
+
+</div>
+
+<h1 id="command-line-arguments-and-default-values">Command-Line Arguments and 
Default Values</h1>
+
+<p>Command-line arguments can be passed to DML and PyDML scripts either as 
named arguments or as positional arguments. Named
+arguments are the preferred technique. Named arguments can be passed utilizing 
the <code>-nvargs</code> switch, and positional arguments
+can be passed using the <code>-args</code> switch.</p>
+
+<p>Default values can be set using the <strong><code>ifdef()</code></strong> 
function.</p>
+
+<p>In the example below, a matrix is read from the file system using named 
argument <code>M</code>. The number of rows to print is specified
+using the <code>rowsToPrint</code> argument, which defaults to 2 if no 
argument is supplied. Likewise, the number of columns is
+specified using <code>colsToPrint</code> with a default value of 2.</p>
+
+<div class="codetabs2">
+
+<div data-lang="DML">
+
+    <div class="highlight"><pre><code class="language-r" data-lang="r"><span 
class="n">fileM</span><span class="w"> </span><span class="o">=</span><span 
class="w"> </span><span class="o">$</span><span class="n">M</span><span 
class="w">
+
+</span><span class="n">numRowsToPrint</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">ifdef</span><span 
class="p">(</span><span class="o">$</span><span 
class="n">rowsToPrint</span><span class="p">,</span><span class="w"> 
</span><span class="m">2</span><span class="p">)</span><span class="w"> 
</span><span class="c1"># default to 2</span><span class="w">
+</span><span class="n">numColsToPrint</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">ifdef</span><span 
class="p">(</span><span class="o">$</span><span 
class="n">colsToPrint</span><span class="p">,</span><span class="w"> 
</span><span class="m">2</span><span class="p">)</span><span class="w"> 
</span><span class="c1"># default to 2</span><span class="w">
+
+</span><span class="n">m</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">read</span><span 
class="p">(</span><span class="n">fileM</span><span class="p">)</span><span 
class="w">
+
+</span><span class="k">for</span><span class="w"> </span><span 
class="p">(</span><span class="n">i</span><span class="w"> </span><span 
class="k">in</span><span class="w"> </span><span class="m">1</span><span 
class="o">:</span><span class="n">numRowsToPrint</span><span 
class="p">)</span><span class="w"> </span><span class="p">{</span><span 
class="w">
+    </span><span class="k">for</span><span class="w"> </span><span 
class="p">(</span><span class="n">j</span><span class="w"> </span><span 
class="k">in</span><span class="w"> </span><span class="m">1</span><span 
class="o">:</span><span class="n">numColsToPrint</span><span 
class="p">)</span><span class="w"> </span><span class="p">{</span><span 
class="w">
+        </span><span class="n">print</span><span class="p">(</span><span 
class="s1">'['</span><span class="w"> </span><span class="o">+</span><span 
class="w"> </span><span class="n">i</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="s1">','</span><span 
class="w"> </span><span class="o">+</span><span class="w"> </span><span 
class="n">j</span><span class="w"> </span><span class="o">+</span><span 
class="w"> </span><span class="s1">']:'</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="n">as.scalar</span><span 
class="p">(</span><span class="n">m</span><span class="p">[</span><span 
class="n">i</span><span class="p">,</span><span class="n">j</span><span 
class="p">]))</span><span class="w">
+    </span><span class="p">}</span><span class="w">
+</span><span class="p">}</span></code></pre></div>
+
+  </div>
+
+<div data-lang="PyDML">
+
+    <div class="highlight"><pre><code class="language-python" 
data-lang="python"><span class="n">fileM</span> <span class="o">=</span> <span 
class="err">$</span><span class="n">M</span>
+
+<span class="n">numRowsToPrint</span> <span class="o">=</span> <span 
class="n">ifdef</span><span class="p">(</span><span class="err">$</span><span 
class="n">rowsToPrint</span><span class="p">,</span> <span 
class="mi">2</span><span class="p">)</span> <span class="c"># default to 
2</span>
+<span class="n">numColsToPrint</span> <span class="o">=</span> <span 
class="n">ifdef</span><span class="p">(</span><span class="err">$</span><span 
class="n">colsToPrint</span><span class="p">,</span> <span 
class="mi">2</span><span class="p">)</span> <span class="c"># default to 
2</span>
+
+<span class="n">m</span> <span class="o">=</span> <span 
class="n">load</span><span class="p">(</span><span class="n">fileM</span><span 
class="p">)</span>
+
+<span class="k">for</span> <span class="p">(</span><span class="n">i</span> 
<span class="ow">in</span> <span class="mi">0</span><span 
class="p">:</span><span class="n">numRowsToPrint</span><span 
class="o">-</span><span class="mi">1</span><span class="p">):</span>
+    <span class="k">for</span> <span class="p">(</span><span 
class="n">j</span> <span class="ow">in</span> <span class="mi">0</span><span 
class="p">:</span><span class="n">numColsToPrint</span><span 
class="o">-</span><span class="mi">1</span><span class="p">):</span>
+        <span class="k">print</span><span class="p">(</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">scalar</span><span class="p">(</span><span 
class="n">m</span><span class="p">[</span><span class="n">i</span><span 
class="p">,</span><span class="n">j</span><span 
class="p">]))</span></code></pre></div>
+
+  </div>
+
+<div data-lang="DML Named Arguments and Results">
+    <pre><code>Example #1 Arguments:
+-f ex.dml -nvargs M=m.csv rowsToPrint=1 colsToPrint=3
+
+Example #1 Results:
+[1,1]:1.0
+[1,2]:2.0
+[1,3]:3.0
+
+Example #2 Arguments:
+-f ex.dml -nvargs M=m.csv
+
+Example #2 Results:
+[1,1]:1.0
+[1,2]:2.0
+[2,1]:0.0
+[2,2]:0.0
+</code></pre>
+
+  </div>
+
+<div data-lang="PyDML Named Arguments and Results">
+    <pre><code>Example #1 Arguments:
+-f ex.pydml -nvargs M=m.csv rowsToPrint=1 colsToPrint=3
+
+Example #1 Results:
+[0,0]:1.0
+[0,1]:2.0
+[0,2]:3.0
+
+Example #2 Arguments:
+-f ex.pydml -nvargs M=m.csv
+
+Example #2 Results:
+[0,0]:1.0
+[0,1]:2.0
+[1,0]:0.0
+[1,1]:0.0
+</code></pre>
+
+  </div>
+
+</div>
+
+<p>Here, we see identical functionality but with positional arguments.</p>
+
+<div class="codetabs2">
+
+<div data-lang="DML">
+
+    <div class="highlight"><pre><code class="language-r" data-lang="r"><span 
class="n">fileM</span><span class="w"> </span><span class="o">=</span><span 
class="w"> </span><span class="o">$</span><span class="m">1</span><span 
class="w">
+
+</span><span class="n">numRowsToPrint</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">ifdef</span><span 
class="p">(</span><span class="o">$</span><span class="m">2</span><span 
class="p">,</span><span class="w"> </span><span class="m">2</span><span 
class="p">)</span><span class="w"> </span><span class="c1"># default to 
2</span><span class="w">
+</span><span class="n">numColsToPrint</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">ifdef</span><span 
class="p">(</span><span class="o">$</span><span class="m">3</span><span 
class="p">,</span><span class="w"> </span><span class="m">2</span><span 
class="p">)</span><span class="w"> </span><span class="c1"># default to 
2</span><span class="w">
+
+</span><span class="n">m</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">read</span><span 
class="p">(</span><span class="n">fileM</span><span class="p">)</span><span 
class="w">
+
+</span><span class="k">for</span><span class="w"> </span><span 
class="p">(</span><span class="n">i</span><span class="w"> </span><span 
class="k">in</span><span class="w"> </span><span class="m">1</span><span 
class="o">:</span><span class="n">numRowsToPrint</span><span 
class="p">)</span><span class="w"> </span><span class="p">{</span><span 
class="w">
+    </span><span class="k">for</span><span class="w"> </span><span 
class="p">(</span><span class="n">j</span><span class="w"> </span><span 
class="k">in</span><span class="w"> </span><span class="m">1</span><span 
class="o">:</span><span class="n">numColsToPrint</span><span 
class="p">)</span><span class="w"> </span><span class="p">{</span><span 
class="w">
+        </span><span class="n">print</span><span class="p">(</span><span 
class="s1">'['</span><span class="w"> </span><span class="o">+</span><span 
class="w"> </span><span class="n">i</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="s1">','</span><span 
class="w"> </span><span class="o">+</span><span class="w"> </span><span 
class="n">j</span><span class="w"> </span><span class="o">+</span><span 
class="w"> </span><span class="s1">']:'</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="n">as.scalar</span><span 
class="p">(</span><span class="n">m</span><span class="p">[</span><span 
class="n">i</span><span class="p">,</span><span class="n">j</span><span 
class="p">]))</span><span class="w">
+    </span><span class="p">}</span><span class="w">
+</span><span class="p">}</span></code></pre></div>
+
+  </div>
+
+<div data-lang="PyDML">
+
+    <div class="highlight"><pre><code class="language-python" 
data-lang="python"><span class="n">fileM</span> <span class="o">=</span> <span 
class="err">$</span><span class="mi">1</span>
+
+<span class="n">numRowsToPrint</span> <span class="o">=</span> <span 
class="n">ifdef</span><span class="p">(</span><span class="err">$</span><span 
class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span 
class="p">)</span> <span class="c"># default to 2</span>
+<span class="n">numColsToPrint</span> <span class="o">=</span> <span 
class="n">ifdef</span><span class="p">(</span><span class="err">$</span><span 
class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span 
class="p">)</span> <span class="c"># default to 2</span>
+
+<span class="n">m</span> <span class="o">=</span> <span 
class="n">load</span><span class="p">(</span><span class="n">fileM</span><span 
class="p">)</span>
+
+<span class="k">for</span> <span class="p">(</span><span class="n">i</span> 
<span class="ow">in</span> <span class="mi">0</span><span 
class="p">:</span><span class="n">numRowsToPrint</span><span 
class="o">-</span><span class="mi">1</span><span class="p">):</span>
+    <span class="k">for</span> <span class="p">(</span><span 
class="n">j</span> <span class="ow">in</span> <span class="mi">0</span><span 
class="p">:</span><span class="n">numColsToPrint</span><span 
class="o">-</span><span class="mi">1</span><span class="p">):</span>
+        <span class="k">print</span><span class="p">(</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">scalar</span><span class="p">(</span><span 
class="n">m</span><span class="p">[</span><span class="n">i</span><span 
class="p">,</span><span class="n">j</span><span 
class="p">]))</span></code></pre></div>
+
+  </div>
+
+<div data-lang="DML Positional Arguments and Results">
+    <pre><code>Example #1 Arguments:
+-f ex.dml -args m.csv 1 3
+
+Example #1 Results:
+[1,1]:1.0
+[1,2]:2.0
+[1,3]:3.0
+
+Example #2 Arguments:
+-f ex.dml -args m.csv
+
+Example #2 Results:
+[1,1]:1.0
+[1,2]:2.0
+[2,1]:0.0
+[2,2]:0.0
+</code></pre>
+
+  </div>
+
+<div data-lang="PyDML Positional Arguments and Results">
+    <pre><code>Example #1 Arguments:
+-f ex.pydml -args m.csv 1 3
+
+Example #1 Results:
+[0,0]:1.0
+[0,1]:2.0
+[0,2]:3.0
+
+Example #2 Arguments:
+-f ex.pydml -args m.csv
+
+Example #2 Results:
+[0,0]:1.0
+[0,1]:2.0
+[1,0]:0.0
+[1,1]:0.0
+</code></pre>
+
+  </div>
+
+</div>
+
+<h1 id="additional-information">Additional Information</h1>
+
+<p>The <a href="dml-language-reference.html">Language Reference</a> contains 
highly detailed information regarding DML.</p>
+
+<p>In addition, many excellent examples can be found in the <a 
href="https://github.com/apache/systemml/tree/master/scripts";><code>scripts</code></a>
 directory.</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>


Reply via email to