Pick vs Take

Can someone explain the difference between NDArray.pick and NDArray.take?

NDArray.pick picks from the ndarray slices along the dimension specified by axis, using the index specified by indices, while NDArray.take takes the entire ndarray slice and axis is always 0.

Here’s an example that illustrates the difference:

>>> from mxnet import nd

>>> a = nd.array([[1, 2], [3, 4], [5, 6]])

>>> a

[[1. 2.]

 [3. 4.]

 [5. 6.]]

>>> y = nd.array([0, 1])

>>> nd.take(a, y)

[[1. 2.]

 [3. 4.]]

<NDArray 2x2 @cpu(0)>

>>> nd.pick(a, y, 0)

[1. 4.]

<NDArray 2 @cpu(0)>

>>>

Take directly indexes the 0 axis while using indices, while Pick indexes the axis provided using both the index of the index and the index in indices. The documentation page linked earlier has more details.

1 Like