前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mxnet 数据操作

mxnet 数据操作

作者头像
繁依Fanyi
发布2023-05-07 16:48:36
4940
发布2023-05-07 16:48:36
举报
文章被收录于专栏:繁依Fanyi 的专栏

1. 创建NDArray

1.1 模块导入:

代码语言:javascript
复制
from mxnet import nd

1.2 创建行向量:

代码语言:javascript
复制
x = nd.arange()

● 示例:

1.3 获取NDArray实例的形状

代码语言:javascript
复制
x.shape

● 示例:

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

代码语言:javascript
复制
x.size

● 示例:

1.5 改变NDArray示例的形状:

代码语言:javascript
复制
X = x.reshape() 

● 示例:

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

1.6 创建张量:

1.6.1 创建各元素为0的张量
代码语言:javascript
复制
nd.zeros()

● 示例:

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

1.6.2创建各元素为1的张量
代码语言:javascript
复制
nd.ones()

● 示例:

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

代码语言:javascript
复制
Y = nd.array()

● 示例:

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

代码语言:javascript
复制
nd.random.normal()

● 示例:

2. 运算(NDArray)

2.1 按元素加法:

● 示例:

2.2 按元素乘法:

● 示例:

2.3 按元素除法:

● 示例:

2.4 按元素做指数运算:

代码语言:javascript
复制
Y.exp()

● 示例:

2.5 做矩阵乘法

代码语言:javascript
复制
nd.dot()

● 示例:

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

2.6 将多个NDArray连结(concatenate)

代码语言:javascript
复制
nd.concat()

● 示例:

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

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

● 示例:

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

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

代码语言:javascript
复制
X.sum()

● 示例:

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

代码语言:javascript
复制
X.asscalar()

● 示例:

例⼦中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:
② 广播(broadcasting)

由于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 通过索引截取矩阵范围:

● 示例:

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

4.3 访问NDArray中单个元素

● 示例:

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

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

● 示例:

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

5. 运算的内存开销

5.1 id()函数

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

示例

5.2 避免临时内存开销:

示例

5.3 减少内存开销:

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

示例

6. NDArray和NumPy相互变换

6.1 思路:

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 创建NDArray
    • 1.1 模块导入:
      • 1.2 创建行向量:
        • 1.3 获取NDArray实例的形状
          • 1.4 获取NDArray实例中元素(element)的总数:
            • 1.5 改变NDArray示例的形状:
              • 1.6 创建张量:
                • 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 示例
                    • 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。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档