blob: 673f1d8748245a1bf95b1e896219e7ca2a175d1f [file] [log] [blame]
<!DOCTYPE html>
<html lang=" en"><head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/image/mxnet-icon.png" rel="icon" type="image/png"><!-- Begin Jekyll SEO tag v2.6.1 -->
<title>NDArray | Apache MXNet</title>
<meta name="generator" content="Jekyll v3.8.6" />
<meta property="og:title" content="NDArray" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="A flexible and efficient library for deep learning." />
<meta property="og:description" content="A flexible and efficient library for deep learning." />
<link rel="canonical" href="https://mxnet.apache.org/api/scala/docs/tutorials/ndarray" />
<meta property="og:url" content="https://mxnet.apache.org/api/scala/docs/tutorials/ndarray" />
<meta property="og:site_name" content="Apache MXNet" />
<script type="application/ld+json">
{"description":"A flexible and efficient library for deep learning.","headline":"NDArray","@type":"WebPage","url":"https://mxnet.apache.org/api/scala/docs/tutorials/ndarray","@context":"https://schema.org"}</script>
<!-- End Jekyll SEO tag -->
<script src="https://medium-widget.pixelpoint.io/widget.js"></script>
<link rel="stylesheet" href="/versions/1.6/assets/main.css"><link type="application/atom+xml" rel="alternate" href="https://mxnet.apache.org/feed.xml" title="Apache MXNet" /><script>
if(!(window.doNotTrack === "1" || navigator.doNotTrack === "1" || navigator.doNotTrack === "yes" || navigator.msDoNotTrack === "1")) {
(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','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-96378503-1', 'auto');
ga('send', 'pageview');
}
</script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<script src="/versions/1.6/assets/js/clipboard.js"></script>
<script src="/versions/1.6/assets/js/copycode.js"></script>
<script src="/versions/1.6/assets/js/globalSearch.js"></script>
<style>
.dropdown {
position: relative;
display: inline-block;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #f9f9f9;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
padding: 12px 16px;
z-index: 1;
text-align: left;
}
.dropdown:hover .dropdown-content {
display: block;
}
</style>
</head>
<body><header class="site-header" role="banner">
<script>
$(document).ready(function () {
// HEADER OPACITY LOGIC
function opacity_header() {
var value = "rgba(4,140,204," + ($(window).scrollTop() / 300 + 0.4) + ")"
$('.site-header').css("background-color", value)
}
$(window).scroll(function () {
opacity_header()
})
opacity_header();
// MENU SELECTOR LOGIC
$('.page-link').each( function () {
if (window.location.href.includes(this.href)) {
$(this).addClass("page-current");
}
});
})
</script>
<div class="wrapper">
<a class="site-title" rel="author" href="/versions/1.6/"><img
src="/versions/1.6/assets/img/mxnet_logo.png" class="site-header-logo"></a>
<nav class="site-nav">
<input type="checkbox" id="nav-trigger" class="nav-trigger"/>
<label for="nav-trigger">
<span class="menu-icon">
<svg viewBox="0 0 18 15" width="18px" height="15px">
<path d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.032C17.335,0,18,0.665,18,1.484L18,1.484z M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.032C17.335,6.031,18,6.696,18,7.516L18,7.516z M18,13.516C18,14.335,17.335,15,16.516,15H1.484 C0.665,15,0,14.335,0,13.516l0,0c0-0.82,0.665-1.483,1.484-1.483h15.032C17.335,12.031,18,12.695,18,13.516L18,13.516z"/>
</svg>
</span>
</label>
<div class="trigger">
<a class="page-link" href="/versions/1.6/get_started">Get Started</a>
<a class="page-link" href="/versions/1.6/blog">Blog</a>
<a class="page-link" href="/versions/1.6/features">Features</a>
<a class="page-link" href="/versions/1.6/ecosystem">Ecosystem</a>
<a class="page-link" href="/versions/1.6/api">Docs & Tutorials</a>
<a class="page-link" href="https://github.com/apache/incubator-mxnet">GitHub</a>
<div class="dropdown">
<span style="display:inline-flex;">1.6
<svg viewBox="0 0 32 32" class="icon icon-caret-bottom" aria-hidden="true" style="width: 18px;"><path d="M24 11.305l-7.997 11.39L8 11.305z" style="fill: white;"></path></svg>
</span>
<div class="dropdown-content">
<a href="/">master</a>
<a href="/versions/1.7/">1.7</a>
<a style="color:#FF4500;" href="/versions/1.6/">1.6</a>
<a href="/versions/1.5.0/">1.5.0</a>
<a href="/versions/1.4.1/">1.4.1</a>
<a href="/versions/1.3.1/">1.3.1</a>
<a href="/versions/1.2.1/">1.2.1</a>
<a href="/versions/1.1.0/">1.1.0</a>
<a href="/versions/1.0.0/">1.0.0</a>
<a href="/versions/0.12.1/">0.12.1</a>
<a href="/versions/0.11.0/">0.11.0</a>
</div>
</div>
</div>
</nav>
</div>
</header>
<main class="page-content" aria-label="Content">
<script>
</script>
<article class="post">
<header class="post-header wrapper">
<h1 class="post-title">NDArray</h1>
<h3></h3></header>
<div class="post-content">
<div class="wrapper">
<div class="row">
<div class="col-3 docs-side-bar">
<!-- resource-p -->
<!-- resource-p -->
<div class="docs-card docs-side">
<ul>
<div class="docs-action-btn">
<a href="/versions/1.6/api/scala.html"> <img src="/versions/1.6/assets/img/compass.svg"
class="docs-logo-docs">Scala Guide <span
class="span-accented"></span></a>
</div>
<div class="docs-action-btn">
<a href="/versions/1.6/api/scala/docs/tutorials"> <img
src="/versions/1.6/assets/img/video-tutorial.svg" class="docs-logo-docs">Scala
Tutorials <span class="span-accented"></span></a>
</div>
<div class="docs-action-btn">
<a href="/versions/1.6/api/scala/docs/api"> <img src="/versions/1.6/assets/img/api.svg"
class="docs-logo-docs">Scala API Reference
<span class="span-accented"></span></a>
</div>
<!-- Let's show the list of tutorials -->
<br>
<h3>Tutorials</h3>
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<!-- resource-p -->
<li><a href="/versions/1.6/api/scala/docs/tutorials/char_lstm">Char-LSTM</a></li>
<!-- page-category -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<li><a href="/versions/1.6/api/scala/docs/tutorials/infer">Infer API</a></li>
<!-- page-category -->
<!-- resource-p -->
<li><a href="/versions/1.6/api/scala/docs/tutorials/io">Data Loading API</a></li>
<!-- page-category -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<li><a href="/versions/1.6/api/scala/docs/tutorials/kvstore">KVStore API</a></li>
<!-- page-category -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<!-- resource-p -->
<li><a href="/versions/1.6/api/scala/docs/tutorials/mnist">MNIST Example</a></li>
<!-- page-category -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<li><a href="/versions/1.6/api/scala/docs/tutorials/model">Model API *Deprecated*</a></li>
<!-- page-category -->
<!-- resource-p -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<li><a href="/versions/1.6/api/scala/docs/tutorials/module">Module API</a></li>
<!-- page-category -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<li><a href="/versions/1.6/api/scala/docs/tutorials/mxnet_scala_on_intellij">Scala on IntelliJ</a></li>
<!-- page-category -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<li><a href="/versions/1.6/api/scala/docs/tutorials/ndarray">NDArray</a></li>
<!-- page-category -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<li><a href="/versions/1.6/api/scala/docs/tutorials/symbol">Symbol API</a></li>
<!-- page-category -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<!-- page-category -->
<!-- resource-p -->
<li><a href="/versions/1.6/api/scala/docs/tutorials/symbol_in_pictures">Symbol in Pictures</a></li>
<!-- page-category -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- page -->
</ul>
</div>
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- resource-p -->
<!-- page -->
</ul>
</div>
<div class="col-9">
<!--- Licensed to the Apache Software Foundation (ASF) under one -->
<!--- or more contributor license agreements. See the NOTICE file -->
<!--- distributed with this work for additional information -->
<!--- regarding copyright ownership. The ASF licenses this file -->
<!--- to you under the Apache License, Version 2.0 (the -->
<!--- "License"); you may not use this file except in compliance -->
<!--- with the License. You may obtain a copy of the License at -->
<!--- http://www.apache.org/licenses/LICENSE-2.0 -->
<!--- Unless required by applicable law or agreed to in writing, -->
<!--- software distributed under the License is distributed on an -->
<!--- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -->
<!--- KIND, either express or implied. See the License for the -->
<!--- specific language governing permissions and limitations -->
<!--- under the License. -->
<h1 id="ndarray-api">NDArray API</h1>
<p>The NDArray package (<code>mxnet.ndarray</code>) contains tensor operations similar to <code>numpy.ndarray</code>. The syntax is also similar, except for some additional calls for dealing with I/O and multiple devices.</p>
<p>Topics:</p>
<ul>
<li><a href="#create-ndarray">Create NDArray</a></li>
<li><a href="#ndarray-operations">NDArray Operations</a></li>
<li><a href="/versions/1.6/api/scala/docs/api/#org.apache.mxnet.NDArray">NDArray API Reference</a></li>
</ul>
<h2 id="create-ndarray">Create NDArray</h2>
<p>Create <code>mxnet.ndarray</code> as follows:</p>
<div class="highlight"><pre><code class="language-scala" data-lang="scala"><span class="k">import</span> <span class="nn">org.apache.mxnet._</span>
<span class="c1">// all-zero array of dimension 100x50
</span><span class="k">val</span> <span class="nv">a</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">zeros</span><span class="o">(</span><span class="mi">100</span><span class="o">,</span> <span class="mi">50</span><span class="o">)</span>
<span class="c1">// all-one array of dimension 256x32x128x1
</span><span class="k">val</span> <span class="nv">b</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">ones</span><span class="o">(</span><span class="mi">256</span><span class="o">,</span> <span class="mi">32</span><span class="o">,</span> <span class="mi">128</span><span class="o">,</span> <span class="mi">1</span><span class="o">)</span>
<span class="c1">// initialize array with contents, you can specify dimensions of array using Shape parameter while creating array.
</span><span class="k">val</span> <span class="nv">c</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">array</span><span class="o">(</span><span class="nc">Array</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="n">shape</span> <span class="k">=</span> <span class="nc">Shape</span><span class="o">(</span><span class="mi">2</span><span class="o">,</span> <span class="mi">3</span><span class="o">))</span>
</code></pre></div>
<p>This is similar to the way you use <code>numpy</code>.</p>
<h2 id="ndarray-operations">NDArray Operations</h2>
<p>We provide some basic ndarray operations, like arithmetic and slice operations.</p>
<h3 id="arithmetic-operations">Arithmetic Operations</h3>
<div class="highlight"><pre><code class="language-scala" data-lang="scala"><span class="k">import</span> <span class="nn">org.apache.mxnet._</span>
<span class="k">val</span> <span class="nv">a</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">zeros</span><span class="o">(</span><span class="mi">100</span><span class="o">,</span> <span class="mi">50</span><span class="o">)</span>
<span class="nv">a</span><span class="o">.</span><span class="py">shape</span>
<span class="c1">// org.apache.mxnet.Shape = (100,50)
</span><span class="k">val</span> <span class="nv">b</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">ones</span><span class="o">(</span><span class="mi">100</span><span class="o">,</span> <span class="mi">50</span><span class="o">)</span>
<span class="c1">// c and d will be calculated in parallel here!
</span><span class="k">val</span> <span class="nv">c</span> <span class="k">=</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span>
<span class="k">val</span> <span class="nv">d</span> <span class="k">=</span> <span class="n">a</span> <span class="o">-</span> <span class="n">b</span>
<span class="c1">// inplace operation, b's contents will be modified, but c and d won't be affected.
</span><span class="n">b</span> <span class="o">+=</span> <span class="n">d</span>
</code></pre></div>
<h3 id="multiplication-division-operations">Multiplication/Division Operations</h3>
<div class="highlight"><pre><code class="language-scala" data-lang="scala"><span class="k">import</span> <span class="nn">org.apache.mxnet._</span>
<span class="c1">// Multiplication
</span><span class="k">val</span> <span class="nv">ndones</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">ones</span><span class="o">(</span><span class="mi">2</span><span class="o">,</span> <span class="mi">1</span><span class="o">)</span>
<span class="k">val</span> <span class="nv">ndtwos</span> <span class="k">=</span> <span class="n">ndones</span> <span class="o">*</span> <span class="mi">2</span>
<span class="nv">ndtwos</span><span class="o">.</span><span class="py">toArray</span>
<span class="c1">// Array[Float] = Array(2.0, 2.0)
</span><span class="o">(</span><span class="n">ndones</span> <span class="o">*</span> <span class="n">ndones</span><span class="o">).</span><span class="py">toArray</span>
<span class="c1">// Array[Float] = Array(1.0, 1.0)
</span><span class="o">(</span><span class="n">ndtwos</span> <span class="o">*</span> <span class="n">ndtwos</span><span class="o">).</span><span class="py">toArray</span>
<span class="c1">// Array[Float] = Array(4.0, 4.0)
</span><span class="n">ndtwos</span> <span class="o">*=</span> <span class="n">ndtwos</span> <span class="c1">// inplace
</span><span class="nv">ndtwos</span><span class="o">.</span><span class="py">toArray</span>
<span class="c1">// Array[Float] = Array(4.0, 4.0)
</span>
<span class="c1">//Division
</span><span class="k">val</span> <span class="nv">ndones</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">ones</span><span class="o">(</span><span class="mi">2</span><span class="o">,</span> <span class="mi">1</span><span class="o">)</span>
<span class="k">val</span> <span class="nv">ndzeros</span> <span class="k">=</span> <span class="n">ndones</span> <span class="o">-</span> <span class="mf">1f</span>
<span class="k">val</span> <span class="nv">ndhalves</span> <span class="k">=</span> <span class="n">ndones</span> <span class="o">/</span> <span class="mi">2</span>
<span class="nv">ndhalves</span><span class="o">.</span><span class="py">toArray</span>
<span class="c1">// Array[Float] = Array(0.5, 0.5)
</span><span class="o">(</span><span class="n">ndhalves</span> <span class="o">/</span> <span class="n">ndhalves</span><span class="o">).</span><span class="py">toArray</span>
<span class="c1">// Array[Float] = Array(1.0, 1.0)
</span><span class="o">(</span><span class="n">ndones</span> <span class="o">/</span> <span class="n">ndones</span><span class="o">).</span><span class="py">toArray</span>
<span class="c1">// Array[Float] = Array(1.0, 1.0)
</span><span class="o">(</span><span class="n">ndzeros</span> <span class="o">/</span> <span class="n">ndones</span><span class="o">).</span><span class="py">toArray</span>
<span class="c1">// Array[Float] = Array(0.0, 0.0)
</span><span class="n">ndhalves</span> <span class="o">/=</span> <span class="n">ndhalves</span>
<span class="nv">ndhalves</span><span class="o">.</span><span class="py">toArray</span>
<span class="c1">// Array[Float] = Array(1.0, 1.0)
</span></code></pre></div>
<h3 id="slice-operations">Slice Operations</h3>
<div class="highlight"><pre><code class="language-scala" data-lang="scala"><span class="k">import</span> <span class="nn">org.apache.mxnet._</span>
<span class="k">val</span> <span class="nv">a</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">array</span><span class="o">(</span><span class="nc">Array</span><span class="o">(</span><span class="mf">1f</span><span class="o">,</span> <span class="mf">2f</span><span class="o">,</span> <span class="mf">3f</span><span class="o">,</span> <span class="mf">4f</span><span class="o">,</span> <span class="mf">5f</span><span class="o">,</span> <span class="mf">6f</span><span class="o">),</span> <span class="n">shape</span> <span class="k">=</span> <span class="nc">Shape</span><span class="o">(</span><span class="mi">3</span><span class="o">,</span> <span class="mi">2</span><span class="o">))</span>
<span class="k">val</span> <span class="nv">a1</span> <span class="k">=</span> <span class="nv">a</span><span class="o">.</span><span class="py">slice</span><span class="o">(</span><span class="mi">1</span><span class="o">)</span>
<span class="nf">assert</span><span class="o">(</span><span class="nv">a1</span><span class="o">.</span><span class="py">shape</span> <span class="o">===</span> <span class="nc">Shape</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="nf">assert</span><span class="o">(</span><span class="nv">a1</span><span class="o">.</span><span class="py">toArray</span> <span class="o">===</span> <span class="nc">Array</span><span class="o">(</span><span class="mf">3f</span><span class="o">,</span> <span class="mf">4f</span><span class="o">))</span>
<span class="k">val</span> <span class="nv">a2</span> <span class="k">=</span> <span class="nv">arr</span><span class="o">.</span><span class="py">slice</span><span class="o">(</span><span class="mi">1</span><span class="o">,</span> <span class="mi">3</span><span class="o">)</span>
<span class="nf">assert</span><span class="o">(</span><span class="nv">a2</span><span class="o">.</span><span class="py">shape</span> <span class="o">===</span> <span class="nc">Shape</span><span class="o">(</span><span class="mi">2</span><span class="o">,</span> <span class="mi">2</span><span class="o">))</span>
<span class="nf">assert</span><span class="o">(</span><span class="nv">a2</span><span class="o">.</span><span class="py">toArray</span> <span class="o">===</span> <span class="nc">Array</span><span class="o">(</span><span class="mf">3f</span><span class="o">,</span> <span class="mf">4f</span><span class="o">,</span> <span class="mf">5f</span><span class="o">,</span> <span class="mf">6f</span><span class="o">))</span>
</code></pre></div>
<h3 id="dot-product">Dot Product</h3>
<div class="highlight"><pre><code class="language-scala" data-lang="scala"><span class="k">import</span> <span class="nn">org.apache.mxnet._</span>
<span class="k">val</span> <span class="nv">arr1</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">array</span><span class="o">(</span><span class="nc">Array</span><span class="o">(</span><span class="mf">1f</span><span class="o">,</span> <span class="mf">2f</span><span class="o">),</span> <span class="n">shape</span> <span class="k">=</span> <span class="nc">Shape</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="k">val</span> <span class="nv">arr2</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">array</span><span class="o">(</span><span class="nc">Array</span><span class="o">(</span><span class="mf">3f</span><span class="o">,</span> <span class="mf">4f</span><span class="o">),</span> <span class="n">shape</span> <span class="k">=</span> <span class="nc">Shape</span><span class="o">(</span><span class="mi">2</span><span class="o">,</span> <span class="mi">1</span><span class="o">))</span>
<span class="k">val</span> <span class="nv">res</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">dot</span><span class="o">(</span><span class="n">arr1</span><span class="o">,</span> <span class="n">arr2</span><span class="o">)</span>
<span class="nv">res</span><span class="o">.</span><span class="py">shape</span>
<span class="c1">// org.apache.mxnet.Shape = (1,1)
</span><span class="nv">res</span><span class="o">.</span><span class="py">toArray</span>
<span class="c1">// Array[Float] = Array(11.0)
</span></code></pre></div>
<h3 id="save-and-load-ndarray">Save and Load NDArray</h3>
<p>You can use MXNet functions to save and load a list or dictionary of NDArrays from file systems, as follows:</p>
<div class="highlight"><pre><code class="language-scala" data-lang="scala"><span class="k">import</span> <span class="nn">org.apache.mxnet._</span>
<span class="k">val</span> <span class="nv">a</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">zeros</span><span class="o">(</span><span class="mi">100</span><span class="o">,</span> <span class="mi">200</span><span class="o">)</span>
<span class="k">val</span> <span class="nv">b</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">zeros</span><span class="o">(</span><span class="mi">100</span><span class="o">,</span> <span class="mi">200</span><span class="o">)</span>
<span class="c1">// save list of NDArrays
</span><span class="nv">NDArray</span><span class="o">.</span><span class="py">save</span><span class="o">(</span><span class="s">"/path/to/array/file"</span><span class="o">,</span> <span class="nc">Array</span><span class="o">(</span><span class="n">a</span><span class="o">,</span> <span class="n">b</span><span class="o">))</span>
<span class="c1">// save dictionary of NDArrays to AWS S3
</span><span class="nv">NDArray</span><span class="o">.</span><span class="py">save</span><span class="o">(</span><span class="s">"s3://path/to/s3/array"</span><span class="o">,</span> <span class="nc">Map</span><span class="o">(</span><span class="s">"A"</span> <span class="o">-&gt;</span> <span class="n">a</span><span class="o">,</span> <span class="s">"B"</span> <span class="o">-&gt;</span> <span class="n">b</span><span class="o">))</span>
<span class="c1">// save list of NDArrays to hdfs.
</span><span class="nv">NDArray</span><span class="o">.</span><span class="py">save</span><span class="o">(</span><span class="s">"hdfs://path/to/hdfs/array"</span><span class="o">,</span> <span class="nc">Array</span><span class="o">(</span><span class="n">a</span><span class="o">,</span> <span class="n">b</span><span class="o">))</span>
<span class="k">val</span> <span class="nv">from_file</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">load</span><span class="o">(</span><span class="s">"/path/to/array/file"</span><span class="o">)</span>
<span class="k">val</span> <span class="nv">from_s3</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">load</span><span class="o">(</span><span class="s">"s3://path/to/s3/array"</span><span class="o">)</span>
<span class="k">val</span> <span class="nv">from_hdfs</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">load</span><span class="o">(</span><span class="s">"hdfs://path/to/hdfs/array"</span><span class="o">)</span>
</code></pre></div>
<p>The good thing about using the <code>save</code> and <code>load</code> interface is that you can use the format across all <code>mxnet</code> language bindings. They also already support Amazon S3 and HDFS.</p>
<h3 id="multi-device-support">Multi-Device Support</h3>
<p>Device information is stored in the <code>mxnet.Context</code> structure. When creating NDArray in MXNet, you can use the context argument (the default is the CPU context) to create arrays on specific devices as follows:</p>
<div class="highlight"><pre><code class="language-scala" data-lang="scala"><span class="k">import</span> <span class="nn">org.apache.mxnet._</span>
<span class="k">val</span> <span class="nv">cpu_a</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">zeros</span><span class="o">(</span><span class="mi">100</span><span class="o">,</span> <span class="mi">200</span><span class="o">)</span>
<span class="nv">cpu_a</span><span class="o">.</span><span class="py">context</span>
<span class="c1">// org.apache.mxnet.Context = cpu(0)
</span><span class="k">val</span> <span class="nv">ctx</span> <span class="k">=</span> <span class="nv">Context</span><span class="o">.</span><span class="py">gpu</span><span class="o">(</span><span class="mi">0</span><span class="o">)</span>
<span class="k">val</span> <span class="nv">gpu_b</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">zeros</span><span class="o">(</span><span class="nc">Shape</span><span class="o">(</span><span class="mi">100</span><span class="o">,</span> <span class="mi">200</span><span class="o">),</span> <span class="n">ctx</span><span class="o">)</span>
<span class="nv">gpu_b</span><span class="o">.</span><span class="py">context</span>
<span class="c1">// org.apache.mxnet.Context = gpu(0)
</span></code></pre></div>
<p>Currently, we <em>do not</em> allow operations among arrays from different contexts. To manually enable this, use the <code>copyto</code> member function to copy the content to different devices, and continue computation:</p>
<div class="highlight"><pre><code class="language-scala" data-lang="scala"><span class="k">import</span> <span class="nn">org.apache.mxnet._</span>
<span class="k">val</span> <span class="nv">x</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">zeros</span><span class="o">(</span><span class="mi">100</span><span class="o">,</span> <span class="mi">200</span><span class="o">)</span>
<span class="k">val</span> <span class="nv">ctx</span> <span class="k">=</span> <span class="nv">Context</span><span class="o">.</span><span class="py">gpu</span><span class="o">(</span><span class="mi">0</span><span class="o">)</span>
<span class="k">val</span> <span class="nv">y</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">zeros</span><span class="o">(</span><span class="nc">Shape</span><span class="o">(</span><span class="mi">100</span><span class="o">,</span> <span class="mi">200</span><span class="o">),</span> <span class="n">ctx</span><span class="o">)</span>
<span class="k">val</span> <span class="nv">z</span> <span class="k">=</span> <span class="n">x</span> <span class="o">+</span> <span class="n">y</span>
<span class="c1">// mxnet.base.MXNetError: [13:29:12] src/ndarray/ndarray.cc:33:
// Check failed: lhs.ctx() == rhs.ctx() operands context mismatch
</span><span class="k">val</span> <span class="nv">cpu_y</span> <span class="k">=</span> <span class="nv">NDArray</span><span class="o">.</span><span class="py">zeros</span><span class="o">(</span><span class="mi">100</span><span class="o">,</span> <span class="mi">200</span><span class="o">)</span>
<span class="nv">y</span><span class="o">.</span><span class="py">copyto</span><span class="o">(</span><span class="n">cpu_y</span><span class="o">)</span>
<span class="k">val</span> <span class="nv">z</span> <span class="k">=</span> <span class="n">x</span> <span class="o">+</span> <span class="n">cpu_y</span>
</code></pre></div>
<h2 id="next-steps">Next Steps</h2>
<ul>
<li>See <a href="kvstore">KVStore API</a> for multi-GPU and multi-host distributed training.</li>
</ul>
</div>
</div>
</div>
</div>
</article>
</main><footer class="site-footer h-card">
<div class="wrapper">
<div class="row">
<div class="col-4">
<h4 class="footer-category-title">Resources</h4>
<ul class="contact-list">
<li><a href="/versions/1.6/community/contribute.html#mxnet-dev-communications">Mailing lists</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/MXNET/Apache+MXNet+Home">Developer Wiki</a></li>
<li><a href="https://issues.apache.org/jira/projects/MXNET/issues">Jira Tracker</a></li>
<li><a href="https://github.com/apache/incubator-mxnet/labels/Roadmap">Github Roadmap</a></li>
<li><a href="https://discuss.mxnet.io">MXNet Discuss forum</a></li>
<li><a href="/versions/1.6/community/contribute.html">Contribute To MXNet</a></li>
</ul>
</div>
<div class="col-4"><ul class="social-media-list"><li><a href="https://github.com/apache/incubator-mxnet"><svg class="svg-icon"><use xlink:href="/versions/1.6/assets/minima-social-icons.svg#github"></use></svg> <span class="username">apache/incubator-mxnet</span></a></li><li><a href="https://www.twitter.com/apachemxnet"><svg class="svg-icon"><use xlink:href="/versions/1.6/assets/minima-social-icons.svg#twitter"></use></svg> <span class="username">apachemxnet</span></a></li><li><a href="https://youtube.com/apachemxnet"><svg class="svg-icon"><use xlink:href="/versions/1.6/assets/minima-social-icons.svg#youtube"></use></svg> <span class="username">apachemxnet</span></a></li></ul>
</div>
<div class="col-4 footer-text">
<p>A flexible and efficient library for deep learning.</p>
</div>
</div>
</div>
</footer>
<footer class="site-footer2">
<div class="wrapper">
<div class="row">
<div class="col-3">
<img src="/versions/1.6/assets/img/apache_incubator_logo.png" class="footer-logo col-2">
</div>
<div class="footer-bottom-warning col-9">
<p>Apache MXNet is an effort undergoing incubation at The Apache Software Foundation (ASF), <span
style="font-weight:bold">sponsored by the <i>Apache Incubator</i></span>. Incubation is required
of all newly accepted projects until a further review indicates that the infrastructure,
communications, and decision making process have stabilized in a manner consistent with other
successful ASF projects. While incubation status is not necessarily a reflection of the completeness
or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
</p><p>"Copyright © 2017-2018, The Apache Software Foundation Apache MXNet, MXNet, Apache, the Apache
feather, and the Apache MXNet project logo are either registered trademarks or trademarks of the
Apache Software Foundation."</p>
</div>
</div>
</div>
</footer>
</body>
</html>