想要跑代码可以参考这里搭建环境,同时再查一下关于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相关推荐

  1. MXNet中x.grad源码追溯

    Python测试代码如https://zh.gluon.ai/chapter_prerequisite/autograd.html 本文追溯x.grad这一行代码的调用 grad调用的是函数MXNDA ...

  2. mxnet深度学习(NDArray)

    mxnet深度学习(NDArray) MXNet里面的3个主要的概念: NDArray:NDArray提供了矩阵和张量(tensor)运算在CPU和GPU上,通过使用并行运算的技术. Symbol:S ...

  3. MXNet中使用卷积神经网络textCNN对文本进行情感分类

    在图像识别领域,卷积神经网络是非常常见和有用的,我们试图将它应用到文本的情感分类上,如何处理呢?其实思路也是一样的,图片是二维的,文本是一维的,同样的,我们使用一维的卷积核去处理一维的文本(当作一维的 ...

  4. Numpy 中的 Ndarray

    numpy概述 Numerical Python,数值的Python,补充了Python语言所欠缺的数值计算能力. Numpy是其它数据分析及机器学习库的底层库. Numpy完全标准C语言实现,运行效 ...

  5. mxnet 中的 DepthwiseConv2D API

    在 https://blog.csdn.net/zhqh100/article/details/90376732 中介绍MobileNet时,提到 DepthwiseConv2D,这是keras中的A ...

  6. python中文读音ndarray-numpy中的ndarray方法和属性详解

    NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是一个一维数 ...

  7. dataframe 切片_NumPy中的ndarray与Pandas的Series和DataFrame之间的区别与转换

    在数据分析中,经常涉及numpy中的ndarray对象与pandas的Series和DataFrame对象之间的转换,让一些开发者产生了困惑.本文将简单介绍这三种数据类型,并以金融市场数据为例,给出相 ...

  8. 数据分析-----NumPy中的ndarray数组

    目录 Numpy概述 Python中的数组 NumPy中的ndarray ndarray中的数据类型 ndarray多维数组属性 ndarray的创建 NumPy 切片和索引 NumPy 线性代数 总 ...

  9. numpy 查找 返回索引_numpy中实现ndarray数组返回符合特定条件的索引方法

    下面为大家分享一篇numpy中实现ndarray数组返回符合特定条件的索引方法,具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 在numpy的ndarray类型中,似乎没有直接返回特定索引的方 ...

最新文章

  1. [Usaco2005 Open]Disease Manangement 疾病管理 BZOJ1688
  2. C语言成长学习题(十六)
  3. (剑指Offer)面试题19:二叉树的镜像
  4. 设计模式四:简单工厂
  5. android monkey优化,GitHub - baozhida/AndroidMonkey: 这个项目是CrashMonkey4Android可执行文件,修复了一些bug,做了一些优化...
  6. java制作头像框_头像框?搬空商店?活动还有二期?春活相关问题答疑
  7. 【AI】(收藏)从 A-Z 全面盘点人工智能专业术语梳理!
  8. 超炫彩光效数码产品线条感海报PSD分层模板,炫亮抓你眼球
  9. Flex实现双轴条状图
  10. mysql读出来的日期后面多了个 .0处理及layui中日期控件点击一闪而过处理
  11. 基于稀疏大规模矩阵的多目标进化算法简介
  12. java ajax教程_JAVA AJAX教程第三章—AJAX详细讲解
  13. 租用云服务器价格表:阿里云和腾讯云服务器最新价格表
  14. 隐蔽的大数据杀熟,“百亿补贴”会员竟比非会员贴得少?
  15. 生成带二维码图片并通过微信分享
  16. b站coderwhy老师_Vue项目开发-仿蘑菇街电商APP
  17. 前端页面设置重置按钮或刷新按钮
  18. 下载kaggle数据集出现的一系列问题
  19. java语言程序设计教程课后题答案魏永红_《Java语言程序设计教程》习题参考答案...
  20. 一行代码得到全学科的北大核心期刊投稿方式

热门文章

  1. KVM Interrupt Virtualization
  2. 9个宠物摄影技巧示例
  3. DVWA 靶场CSRF(low)
  4. java多态方法调用_java 多态调用
  5. 全文检索 Elasticsearch(简称es)
  6. 什么是网络渠道营销根本?(二)
  7. QQ18年,解密8亿月活的QQ后台服务接口隔离技术
  8. 服装行业常用术语(zt)
  9. [Javascript] 正则表达式匹配的常用方法总结
  10. C语言产生五个不同随机数