一、创建NDarrray
1. 导入ndarray模块
from mxnet import nd
2. 创建一个行向量
x = nd.arange(12)
3. 该向量的形状
x.shape
4. 该向量的元素总数
x.size
5. 改变向量形状
x.reshape((3,4))#3行4列矩阵
6. 创建0或单位矩阵
nd.zeros((2,3,4))#形状为(2,3,4)的张量 向量和矩阵都是特殊的张量
nd.one((3,4))
7. 创建指定的矩阵
Y = nd.array([[1,2,3],[4,5,6],[7,8,9]])
二、运算
X+Y
X-Y
X/Y
X*Y
X.sum()#所有元素的和
Y.exp()#元素指数运算
nd.dot(X,Y.T)#矩阵乘法 可以与Y矩阵的转置作乘法
x.norm().asscalar()#将结果变换Python标量
广播机制:适当复制使得形状相同后再按元素运算
A = nd.arange(3).reshape((3,1))
B = nd.arange(2).reshape((1,2))
A + B
索引
索引从0开始递增,如:一个3行2列的矩阵的行索引分别为0、1、2,列索引为0和1
X[1:3] #索引1和2两行元素
X[1,2] = 9 #为行索引1,列索引2赋值
x[1:2,:] = 12 为行索引的每一列赋值
NDArray和NumPy相互变换
1.将NumPy变换成NDArray
import numpy as np
P = np.ones((2,3))
D = nd.array(P)
2.将NDArray转换成NumPy
D.asnumpy()
对函数 y = 2 x T x y=2x^Tx y=2xTx求关于列向量x的梯度
from mxnet import autograd, nd #创建变量x赋初值
x = nd.arange(4).reshape(4,1)
x.attach_grad() # 调用attach_grad函数来申请存储梯度所需要的内存
with autograd.record():
y = 2 * nd.dot(x,T,x)
y.backward() # 由于x(4,1)是一个标量调用backward函数自动求梯度
assert(x.grad - 4*x).norm().asscalar()==0 # 验证梯度是否正确
x.grad