u2gilles
u2gilles

Reputation: 7383

How to append a element to mxnet NDArray?

In numpy, one can append an element to an array by using np.append().

But though numpy and mxnet arrays are supposed to be sumilar, there is not append() function in NDArray class.

Update(18/04/24): Thanks Thom. In fact, what I tried to achieve is this in numpy :

import numpy as np
np_a1 = np.empty((0,3), int)
np_a1 = np.append(np_a1, np.array([[1,2,3],[4,5,6]]), axis=0)
np_a1 = np.append(np_a1, np.array([[7,8,9]]), axis=0)
print("\nnp_a1:\n", np_a1)
print(np_a1.shape)

Thanks to you answer, I did that :

import mxnet as mx
nd_a1 = mx.nd.array([[0, 0, 0]])
# nd_a1 = mx.nd.empty((0,3))
nd_a1 = mx.nd.concat(nd_a1, mx.nd.array([[1,2,3],[4,5,6]]), dim=0)
nd_a1 = mx.nd.concat(nd_a1, mx.nd.array([[7, 8, 9]]), dim=0)
print("\nnd_a1", nd_a1)
print(nd_a1.shape)

But I can't figure out how to start from an empty nd array. Starting from :

nd_a1 = mx.nd.empty((0,3))

does not work

Upvotes: 2

Views: 2006

Answers (1)

Thom Lane
Thom Lane

Reputation: 1063

You can use mx.nd.concat to achieve this. Using the example given in the numpy docs, you need to be careful with dimensions before concatenating. MXNet works well with data in batches (often the first dimension if the is batch dimension) as this is useful when training/using neural networks, but this makes the example below look more complicated than it would be in practice.

import numpy as np
import mxnet as mx

a = np.array([1, 2, 3])
b = np.array([[4, 5, 6], [7, 8, 9]])
out = np.append(a, b)
print(out)

a = mx.nd.array([1, 2, 3])
b = mx.nd.array([[4, 5, 6], [7, 8, 9]])
a = a.expand_dims(0)
out = mx.nd.concat(a, b, dim=0)
out = out.reshape(shape=(-1,))
print(out)

Upvotes: 5

Related Questions