欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《Gluon 动手学深度学习 二》NDArray和NumPy

程序员文章站 2024-03-14 12:15:52
...

"在深度学习中,通常会频繁地对数据进行操作。在MXNet中,NDArray是存储和变换数据的主要工具。NDArray和NumPy的多维数组非常类似。然而,NDArray提供更多的功能,例如CPU和GPU的异步计算,以及自动求导。这些都使得NDArray更加适合深度学习。"

1.创建NDArray

from mxnet import nd

x = nd.arange(12)

x结果:

《Gluon 动手学深度学习 二》NDArray和NumPy

x = x.reshape((4,3))

x结果:

《Gluon 动手学深度学习 二》NDArray和NumPy

x.reshape((3, 4))也可写成x.reshape((-1, 4))或x.reshape((3, -1))。由于x的元素个数是已知的,这里的-1是能够通过元素个数和其他维的大小推断出来的。

2.创建张量:

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

x=nd.zeros((2,3,4))

x结果:

《Gluon 动手学深度学习 二》NDArray和NumPy

3.通过列表(list)制定需要创建的NDArray中的元素

y = nd.array([[1,3,5],[2,6,7],[4,5,9]])

y结果:

《Gluon 动手学深度学习 二》NDArray和NumPy

4.随机生成NDArray元素

 nd.random.normal(0,1,shape(3,4))

每个元素都随机采样于均值为0标准差为1的正态分布。

《Gluon 动手学深度学习 二》NDArray和NumPy

5.NDArray属性

#形状
y.shape

#元素总数
y.size

6.运算

创建的两个形状为(3, 4)的NDArray x , y

加减乘除法   结果形状不变。

《Gluon 动手学深度学习 二》NDArray和NumPy《Gluon 动手学深度学习 二》NDArray和NumPy《Gluon 动手学深度学习 二》NDArray和NumPy

连接两个矩阵

《Gluon 动手学深度学习 二》NDArray和NumPy

按照元素进行运算

《Gluon 动手学深度学习 二》NDArray和NumPy

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

《Gluon 动手学深度学习 二》NDArray和NumPy

转置

《Gluon 动手学深度学习 二》NDArray和NumPy

======注意======

①NDArray中元素求和后 是个标量,但是保留了NDArray格式

《Gluon 动手学深度学习 二》NDArray和NumPy

②可以通过asscalar函数转换为python中的数

《Gluon 动手学深度学习 二》NDArray和NumPy

7.广播机制broadcasting

由于a和b分别是3行1列和1行2列的矩阵,为了使它们可以按元素相加,计算时a中第一列的三个元素被广播(复制)到了第二列,而b中第一行的两个元素被广播(复制)到了第二行和第三行。如此,我们就可以对两个3行2列的矩阵按元素相加,得到上面的结果。

《Gluon 动手学深度学习 二》NDArray和NumPy

=====注意=====

运行内存开销

假设x和y都是NDArray,在执行y = x + y操作后, y所对应的内存地址将变成为存储x + y计算结果而新开内存的地址。

可以使用Python自带的id函数:如果两个实例的ID一致,它们所对应的内存地址相同;反之则不同。

《Gluon 动手学深度学习 二》NDArray和NumPy《Gluon 动手学深度学习 二》NDArray和NumPy

8.索引

索引(index)代表了元素的位置。NDArray的索引从0开始逐一递增。例如一个3行2列的矩阵的行索引分别为0、1和2,列索引分别为0和1。

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

《Gluon 动手学深度学习 二》NDArray和NumPy

可以指定NDArray中需要访问的单个元素的位置,例如矩阵中行和列的索引,并重设该元素的值。

《Gluon 动手学深度学习 二》NDArray和NumPy

======================

NDArray和NumPy相互变换


import numpy as np
x = np.ones((2, 3))
y = nd.array(x)  # NumPy 变换成 NDArray。
z = y.asnumpy()  # NDArray 变换成 NumPy。
z, y

《Gluon 动手学深度学习 二》NDArray和NumPy


备注:

NumPy想要了解更多的知识,墙裂推荐学习参考3.中的内容!

参考:

1.NDArray API:https://mxnet.incubator.apache.org/api/python/ndarray/ndarray.html

2.NumPy:https://docs.scipy.org/doc/numpy/user/quickstart.html

3.Numpy教程:https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/

相关标签: NDArray NumPy