动手深度学习一一数据操作

一、创建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

你可能感兴趣的:(深度学习)