Manipulate data with ndarray
¶
We’ll start by introducing the NDArray
, MXNet’s primary tool for storing and transforming data. If you’ve worked with NumPy
before, you’ll notice that an NDArray is, by design, similar to NumPy’s multi-dimensional array.
Get started¶
To get started, let’s import the ndarray
package (nd
is a shorter alias) from MXNet.
[1]:
# If you haven't installed MXNet yet, you can uncomment the following line to
# install the latest stable release
# !pip install -U mxnet
from mxnet import nd
Next, let’s see how to create a 2D array (also called a matrix) with values from two sets of numbers: 1, 2, 3 and 4, 5, 6. This might also be referred to as a tuple of a tuple of integers.
[2]:
nd.array(((1,2,3),(5,6,7)))
We can also create a very simple matrix with the same shape (2 rows by 3 columns), but fill it with 1s.
[3]:
x = nd.ones((2,3))
x
Often we’ll want to create arrays whose values are sampled randomly. For example, sampling values uniformly between -1 and 1. Here we create the same shape, but with random sampling.
[15]:
y = nd.random.uniform(-1,1,(2,3))
y
You can also fill an array of a given shape with a given value, such as 2.0
.
[16]:
x = nd.full((2,3), 2.0)
x
As with NumPy, the dimensions of each NDArray are accessible by accessing the .shape
attribute. We can also query its size
, which is equal to the product of the components of the shape. In addition, .dtype
tells the data type of the stored values.
[17]:
(x.shape, x.size, x.dtype)
Operations¶
NDArray supports a large number of standard mathematical operations, such as element-wise multiplication:
[18]:
x * y
Exponentiation:
[23]:
y.exp()
And transposing a matrix to compute a proper matrix-matrix product:
[24]:
nd.dot(x, y.T)
Indexing¶
MXNet NDArrays support slicing in all the ridiculous ways you might imagine accessing your data. Here’s an example of reading a particular element, which returns a 1D array with shape (1,)
.
[25]:
y[1,2]
Read the second and third columns from y
.
[26]:
y[:,1:3]
and write to a specific element.
[27]:
y[:,1:3] = 2
y
Multi-dimensional slicing is also supported.
[28]:
y[1:2,0:2] = 4
y
Converting between MXNet NDArray and NumPy¶
Converting MXNet NDArrays to and from NumPy is easy. The converted arrays do not share memory.
[29]:
a = x.asnumpy()
(type(a), a)
[30]:
nd.array(a)