NDArray 程序包 (mxnet.ndarray
) 包含类似于 numpy.ndarray
的 张量计算包. 它的语法很相近, 除了增加了一些处理 I/O 和多设备的调用.
类似 numpy
, 你可以按照下面的方式来创建 mxnet.ndarray
:
import mxnet as mx
# all-zero array of dimension 100x50
a = mx.nd.zeros((100, 50))
# all-one array of dimension 256x32x128x1
b = mx.nd.ones((256, 32, 128, 1))
# initialize array with contents
c = mx.nd.array([[1, 2, 3], [4, 5, 6]])
设备信息是存储在 mxnet.Context
数据结构中. 当我们在 mxnet 中创建 ndarray 的时候, 我们要么使用上下文参数 (默认是 CPU 上下文) 在指定的设备上创建, 或者按照下面的例子中的方式使用 with
表达式:
import mxnet as mx
cpu_a = mx.nd.zeros((100, 200))
cpu_a.context
cpu(0)
with mx.Context(mx.gpu(0)):
gpu_a = mx.nd.ones((100, 200))
gpu_a.context
gpu(0)
ctx = mx.Context(mx.gpu(0))
gpu_b = mx.nd.zeros((100, 200), ctx)
gpu_b.context
gpu(0)
现在我们还 不支持 涉及不同上下文环境中的多个 ndarray 的操作. 为了支持这种情况下的操作, 我们首先使用 copyto
方法将不同的上下文环境中的 ndarray 拷贝到同一个上下文环境中, 然后执行相应的操作:
import mxnet as mx
x = mx.nd.zeros((100, 200))
with mx.Context(mx.gpu(0)):
y = mx.nd.zeros((100, 200))
z = x + y
mxnet.base.MXNetError: [13:29:12] src/ndarray/ndarray.cc:33: Check failed: lhs.ctx() == rhs.ctx() operands context mismatch
cpu_y = mx.nd.zeros((100, 200))
y.copyto(cpu_y)
z = x + cpu_y
.. raw:: html
.. automodule:: mxnet.ndarray
:members:
.. raw:: html
.. automodule:: mxnet.random
:members:
.. raw:: html
.. automodule:: mxnet.context
:members:
.. raw:: html