首页 > 其他分享 >mxnet 数据操作

mxnet 数据操作

时间:2022-12-28 12:39:12浏览次数:37  
标签:mxnet 示例 nd 元素 矩阵 索引 操作 数据 NDArray

 

文章目录

  • ​​1. 创建NDArray​​
  • ​​1.1 模块导入:​​
  • ​​1.2 创建行向量:​​
  • ​​1.3 获取NDArray实例的形状​​
  • ​​1.4 获取NDArray实例中元素(element)的总数:​​
  • ​​1.5 改变NDArray示例的形状:​​
  • ​​1.6 创建张量:​​
  • ​​1.6.1 创建各元素为0的张量​​
  • ​​1.6.2创建各元素为1的张量​​
  • ​​1.7 通过Python的列表(list)指定需要创建的NDArray中每个元素的值​​
  • ​​1.8 随机生成NDArray中每个元素的值​​
  • ​​2. 运算(NDArray)​​
  • ​​2.1 按元素加法:​​
  • ​​2.2 按元素乘法:​​
  • ​​2.3 按元素除法:​​
  • ​​2.4 按元素做指数运算:​​
  • ​​2.5 做矩阵乘法​​
  • ​​2.6 将多个NDArray连结(concatenate)​​
  • ​​2.7 使用条件判断式得到元素为0或1的新的NDArray。​​
  • ​​2.8 对NDArray中所有元素求和得到一个只有一个元素的NDArray。​​
  • ​​2.9 将结果(NDArray)转化成标量​​
  • ​​3. 广播机制​​
  • ​​3.1 概念​​
  • ​​3.2 示例​​
  • ​​① 定义两个NDArray:​​
  • ​​② 广播(broadcasting)​​
  • ​​4. 索引​​
  • ​​4.1 概念:​​
  • ​​4.2 通过索引截取矩阵范围:​​
  • ​​4.3 访问NDArray中单个元素​​
  • ​​4.4 截取部分元素,并为其重新赋值​​
  • ​​5. 运算的内存开销​​
  • ​​5.1 id()函数​​
  • ​​5.2 避免临时内存开销:​​
  • ​​5.3 减少内存开销:​​
  • ​​6. NDArray和NumPy相互变换​​
  • ​​6.1 思路:​​
  • ​​6.2 实例:将NumPy实例变换成NDArray。​​

1. 创建NDArray

1.1 模块导入:

from mxnet import nd

1.2 创建行向量:

x = nd.arange()

● 示例:

mxnet 数据操作_矩阵

1.3 获取NDArray实例的形状

x.shape

● 示例:

mxnet 数据操作_矩阵_02

1.4 获取NDArray实例中元素(element)的总数:

x.size

● 示例:

mxnet 数据操作_mxnet_03

1.5 改变NDArray示例的形状:

X = x.reshape()

● 示例:

mxnet 数据操作_NumPy_04

使⽤reshape函数把⾏向量x的形状改为(3, 4),也就是⼀个3⾏4列的矩阵,并记作X。除了形状改变之外,X中的元素保持不变。

1.6 创建张量:

1.6.1 创建各元素为0的张量

nd.zeros()

● 示例:

mxnet 数据操作_深度学习_05

mxnet 数据操作_深度学习_06


我们创建⼀个各元素为0,形状为(2, 3, 4)的张量。实际上,之前创建的向量和矩阵都是特殊的张量。

1.6.2创建各元素为1的张量

nd.ones()

● 示例:

mxnet 数据操作_深度学习_07

1.7 通过Python的列表(list)指定需要创建的NDArray中每个元素的值

Y = nd.array()

● 示例:

mxnet 数据操作_赋值_08

1.8 随机生成NDArray中每个元素的值

nd.random.normal()

● 示例:

mxnet 数据操作_深度学习_09

2. 运算(NDArray)

2.1 按元素加法:

● 示例:

mxnet 数据操作_NumPy_10

2.2 按元素乘法:

● 示例:

mxnet 数据操作_NumPy_11

2.3 按元素除法:

● 示例:

mxnet 数据操作_mxnet_12

2.4 按元素做指数运算:

Y.exp()

● 示例:

mxnet 数据操作_赋值_13

2.5 做矩阵乘法

nd.dot()

● 示例:

mxnet 数据操作_深度学习_14

下⾯将X与Y的转置做矩阵乘法。由于X是3⾏4列的矩阵,Y转置为4⾏3列的矩阵,因此两个矩阵相乘得到3⾏3列的矩阵。

2.6 将多个NDArray连结(concatenate)

nd.concat()

● 示例:

mxnet 数据操作_矩阵_15

下⾯分别在⾏上(维度0,即形状中的最左边元32 2. 预备知识素)和列上(维度1,即形状中左起第⼆个元素)连结两个矩阵。可以看到,输出的第⼀个NDArray在维度0的⻓度(6)为两个输⼊矩阵在维度0的⻓度之和(3 + 3),而输出的第⼆个NDArray在维度1的⻓度(8)为两个输⼊矩阵在维度1的⻓度之和(4 + 4)。

2.7 使用条件判断式得到元素为0或1的新的NDArray。

● 示例:

mxnet 数据操作_赋值_16

以 X == Y 为例,如果X和Y在相同位置的条件判断为真(值相等),那么新的NDArray在相同位置的值为1;反之为0。

2.8 对NDArray中所有元素求和得到一个只有一个元素的NDArray。

X.sum()

● 示例:

mxnet 数据操作_NumPy_17

2.9 将结果(NDArray)转化成标量

X.asscalar()

● 示例:

mxnet 数据操作_矩阵_18

例⼦中X的L2范数结果同上例⼀样是单元素NDArray,但最后结果变换成了Python中的标量。

● 拓展:
我们也可以把Y.exp()、X.sum()、X.norm()等分别改写为nd.exp(Y)、nd.sum(X)、nd.norm(X)等。

3. 广播机制

3.1 概念

当对两个形状不同的NDArray按元素运算时,可能会触发⼴播(broadcasting)机制:先适当复制元素使这两个NDArray形状相同后再按元素运算。

3.2 示例

① 定义两个NDArray:

mxnet 数据操作_mxnet_19

② 广播(broadcasting)

mxnet 数据操作_mxnet_20


由于A和B分别是3⾏1列和1⾏2列的矩阵,如果要计算A + B,那么A中第⼀列的3个元素被⼴播(复制)到了第⼆列,而B中第⼀⾏的2个元素被⼴播(复制)到了第⼆⾏和第三⾏。如此,就可以对2个3⾏2列的矩阵按元素相加。

4. 索引

4.1 概念:

● 在NDArray中,索引(index)代表了元素的位置。NDArray的索引从0开始逐⼀递增。例如,⼀个3⾏2列的矩阵的⾏索引分别为0、1和2,列索引分别为0和1。
● 注意:左闭右开

4.2 通过索引截取矩阵范围:

● 示例:

mxnet 数据操作_NumPy_21


mxnet 数据操作_NumPy_22

我们指定了NDArray的⾏索引截取范围[1:3]。依据左闭右开指定范围的惯例,它截取了矩阵X中⾏索引为1和2的两⾏。

4.3 访问NDArray中单个元素

● 示例:

mxnet 数据操作_mxnet_23

矩阵中⾏和列的索引,并为该元素重新赋值。

4.4 截取部分元素,并为其重新赋值

● 示例:

mxnet 数据操作_深度学习_24

例⼦中,我们为⾏索引为1的每⼀列元素重新赋值。

5. 运算的内存开销

5.1 id()函数

如果两个实例的ID一致,那么它们所对应的内存地址相同,反之则不同。

示例

mxnet 数据操作_赋值_25

5.2 避免临时内存开销:

示例

mxnet 数据操作_mxnet_26

5.3 减少内存开销:

如果X的值在之后的程序中不会复⽤,我们也可以⽤ X[:] = X + Y 或者 X += Y 来减少运算的内存开销。

示例

mxnet 数据操作_深度学习_27

6. NDArray和NumPy相互变换

6.1 思路:

我们可以通过array函数和asnumpy函数令数据在NDArray和NumPy格式之间相互变换。

6.2 实例:将NumPy实例变换成NDArray。

mxnet 数据操作_赋值_28


标签:mxnet,示例,nd,元素,矩阵,索引,操作,数据,NDArray
From: https://blog.51cto.com/u_15082598/5974257

相关文章