MXNet中的NDArray
想要跑代码可以参考这里搭建环境,同时再查一下关于jupyter notebook的基本操作即可。本文是笔记以及一些自己的补充。
在MXNet中,NDArray是一个类,也是存储和变换数据的主要工具,和NumPy的多维数组类似,提供GPU计算和自动求梯度等功能。
创建NDArray
首先从MXNet导入ndarray模块,nd是ndarray的缩写形式,两种导入方式均可,但要注意之后使用的时候前缀要对应导入的形式。
from mxnet import ndarray #之后要使用ndarray.function()
from mxnet import nd #之后要使用nd.function(),后面以nd为例
arange函数创建一个行向量。(不是arrange)
x = nd.arange(12)
x[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.] #从0开始的12个连续整数
<NDArray 12 @cpu(0)> #被创建在CPU使用的内存上
通过shape属性来获取NDArray实例的形状
通过size属性得到NDArray实例中元素(element)的总数。
x.shape(12,) #x是长度为12的一维数组,并不是1行12列的矩阵x.size12
reshape函数把行向量x的形状改为(3, 4),也就是一个3行4列的矩阵,并记作X。除了形状改变之外,X中的元素保持不变。
X = x.reshape((3, 4))
X[[ 0. 1. 2. 3.][ 4. 5. 6. 7.][ 8. 9. 10. 11.]]
<NDArray 3x4 @cpu(0)>
X = X.reshape((1,12))
X[[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.]] #此时的X是矩阵,比刚开始的x外面又多了一层[ ]
<NDArray 1x12 @cpu(0)>X.shape
(1, 12) #且shape表示为1行12列
注意X属性中的形状发生了变化。上面x.reshape((3, 4))也可写成x.reshape((-1, 4))或x.reshape((3, -1))。由于x的元素个数是已知的,这里的-1是能够通过元素个数和其他维度的大小推断出来的。
创建一个各元素为0,形状为(2, 3, 4)的张量。实际上,之前创建的向量和矩阵都是特殊的张量。同样我们也可以创建各元素为1的张量。然鹅并不支持twos以及后面的数字了。
nd.zeros((2, 3, 4))[[[0. 0. 0. 0.][0. 0. 0. 0.][0. 0. 0. 0.]][[0. 0. 0. 0.][0. 0. 0. 0.][0. 0. 0. 0.]]]
<NDArray 2x3x4 @cpu(0)>nd.ones((3, 4))[[1. 1. 1. 1.][1. 1. 1. 1.][1. 1. 1. 1.]]
<NDArray 3x4 @cpu(0)>
通过Python的列表(list)指定需要创建的NDArray中每个元素的值。要注意[ ]。矩阵的表示为最外面一层[ ],中间每一对[ ]表示一行
Y = nd.array([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
Y[[2. 1. 4. 3.][1. 2. 3. 4.][4. 3. 2. 1.]]
<NDArray 3x4 @cpu(0)>
有些情况下,我们需要随机生成NDArray中每个元素的值。下面我们创建一个形状为(3, 4)的NDArray。它的每个元素都随机采样于均值为0、标准差为1的正态分布。
nd.random.normal(0, 1, shape=(3, 4))[[-0.5916499 0.85860497 -0.22794183 0.20131476][ 0.3500547 0.5360521 1.5194443 1.9040879 ][-1.5734432 -0.14007866 0.29670075 1.3111951 ]]
<NDArray 3x4 @cpu(0)>
运算
对矩阵内的元素进行运算,首先要保证两个矩阵形状一致,所得结果形状不变。
X + Y #加[[ 2. 2. 6. 6.][ 5. 7. 9. 11.][12. 12. 12. 12.]]
<NDArray 3x4 @cpu(0)>Y = Y.reshape(4,3) #此时做X+Y会报错
X + Y.T # T将Y矩阵进行转置(可以看看这个reshape和转置是怎么转的)[[ 2. 4. 5. 6.][ 5. 6. 10. 9.][12. 11. 14. 12.]]
<NDArray 3x4 @cpu(0)>X * Y #乘[[ 0. 1. 8. 9.][ 4. 10. 18. 28.][32. 27. 20. 11.]]
<NDArray 3x4 @cpu(0)>X / Y #除[[ 0. 1. 0.5 1. ][ 4. 2.5 2. 1.75][ 2. 3. 5. 11. ]]
<NDArray 3x4 @cpu(0)>Y.exp() #指数运算(e的x次方,x为矩阵对应元素)[[ 7.389056 2.7182817 54.59815 20.085537 ][ 2.7182817 7.389056 20.085537 54.59815 ][54.59815 20.085537 7.389056 2.7182817]]
<NDArray 3x4 @cpu(0)>
除了按元素计算外,我们还可以使用dot函数做矩阵乘法。下面将X与Y的转置做矩阵乘法。由于X是3行4列的矩阵,Y转置为4行3列的矩阵,因此两个矩阵相乘得到3行3列的矩阵。
nd.dot(X, Y.T) #此处Y为最开始的Y[[ 18. 20. 10.][ 58. 60. 50.][ 98. 100. 90.]]
<NDArray 3x3 @cpu(0)>
我们也可以将多个NDArray连结(concatenate)。简单理解,当dim为0时将两矩阵上下拼起来,当dim为1将两矩阵左右拼起来。注意结果行数和列数的变化。
nd.concat(X, Y, dim=0), nd.concat(X, Y, dim=1)([[ 0. 1. 2. 3.][ 4. 5. 6. 7.][ 8. 9. 10. 11.][ 2. 1. 4. 3.][ 1. 2. 3. 4.][ 4. 3. 2. 1.]]<NDArray 6x4 @cpu(0)>,[[ 0. 1. 2. 3. 2. 1. 4. 3.][ 4. 5. 6. 7. 1. 2. 3. 4.][ 8. 9. 10. 11. 4. 3. 2. 1.]]<NDArray 3x8 @cpu(0)>)
使用条件判断式可以得到元素为0或1的新的NDArray。以X == Y为例,如果X和Y在相同位置的条件判断为真(值相等),那么新的NDArray在相同位置的值为1;反之为0。X > Y,X < Y都能作为条件判断式。
X == Y[[0. 1. 0. 1.][0. 0. 0. 0.][0. 0. 0. 0.]]
<NDArray 3x4 @cpu(0)>X > Y[[0. 0. 0. 0.][1. 1. 1. 0.][1. 1. 1. 0.]]
<NDArray 3x4 @cpu(0)>
对NDArray中的所有元素求和得到只有一个元素的NDArray。
X.sum()[66.]
<NDArray 1 @cpu(0)>
我们可以通过asscalar函数将结果变换为Python中的标量。(用通俗的说法,标量是只有大小,没有方向的量。矢量是一种既有大小又有方向的量,又称为向量。)
下面例子中X的
MXNet中的NDArray相关推荐
- MXNet中x.grad源码追溯
Python测试代码如https://zh.gluon.ai/chapter_prerequisite/autograd.html 本文追溯x.grad这一行代码的调用 grad调用的是函数MXNDA ...
- mxnet深度学习(NDArray)
mxnet深度学习(NDArray) MXNet里面的3个主要的概念: NDArray:NDArray提供了矩阵和张量(tensor)运算在CPU和GPU上,通过使用并行运算的技术. Symbol:S ...
- MXNet中使用卷积神经网络textCNN对文本进行情感分类
在图像识别领域,卷积神经网络是非常常见和有用的,我们试图将它应用到文本的情感分类上,如何处理呢?其实思路也是一样的,图片是二维的,文本是一维的,同样的,我们使用一维的卷积核去处理一维的文本(当作一维的 ...
- Numpy 中的 Ndarray
numpy概述 Numerical Python,数值的Python,补充了Python语言所欠缺的数值计算能力. Numpy是其它数据分析及机器学习库的底层库. Numpy完全标准C语言实现,运行效 ...
- mxnet 中的 DepthwiseConv2D API
在 https://blog.csdn.net/zhqh100/article/details/90376732 中介绍MobileNet时,提到 DepthwiseConv2D,这是keras中的A ...
- python中文读音ndarray-numpy中的ndarray方法和属性详解
NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是一个一维数 ...
- dataframe 切片_NumPy中的ndarray与Pandas的Series和DataFrame之间的区别与转换
在数据分析中,经常涉及numpy中的ndarray对象与pandas的Series和DataFrame对象之间的转换,让一些开发者产生了困惑.本文将简单介绍这三种数据类型,并以金融市场数据为例,给出相 ...
- 数据分析-----NumPy中的ndarray数组
目录 Numpy概述 Python中的数组 NumPy中的ndarray ndarray中的数据类型 ndarray多维数组属性 ndarray的创建 NumPy 切片和索引 NumPy 线性代数 总 ...
- numpy 查找 返回索引_numpy中实现ndarray数组返回符合特定条件的索引方法
下面为大家分享一篇numpy中实现ndarray数组返回符合特定条件的索引方法,具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 在numpy的ndarray类型中,似乎没有直接返回特定索引的方 ...
最新文章
- [Usaco2005 Open]Disease Manangement 疾病管理 BZOJ1688
- C语言成长学习题(十六)
- (剑指Offer)面试题19:二叉树的镜像
- 设计模式四:简单工厂
- android monkey优化,GitHub - baozhida/AndroidMonkey: 这个项目是CrashMonkey4Android可执行文件,修复了一些bug,做了一些优化...
- java制作头像框_头像框?搬空商店?活动还有二期?春活相关问题答疑
- 【AI】(收藏)从 A-Z 全面盘点人工智能专业术语梳理!
- 超炫彩光效数码产品线条感海报PSD分层模板,炫亮抓你眼球
- Flex实现双轴条状图
- mysql读出来的日期后面多了个 .0处理及layui中日期控件点击一闪而过处理
- 基于稀疏大规模矩阵的多目标进化算法简介
- java ajax教程_JAVA AJAX教程第三章—AJAX详细讲解
- 租用云服务器价格表:阿里云和腾讯云服务器最新价格表
- 隐蔽的大数据杀熟,“百亿补贴”会员竟比非会员贴得少?
- 生成带二维码图片并通过微信分享
- b站coderwhy老师_Vue项目开发-仿蘑菇街电商APP
- 前端页面设置重置按钮或刷新按钮
- 下载kaggle数据集出现的一系列问题
- java语言程序设计教程课后题答案魏永红_《Java语言程序设计教程》习题参考答案...
- 一行代码得到全学科的北大核心期刊投稿方式