李沐-动手学深度学习(二-1)数据操作

1、n维数组

N维数组(也称为张量tensor)是机器学习和神经网络的主要数据结构。

2维:例如图中,三个样本,每一行是一个样本,每一列是不同的特征。

3维,例如RGB图片,宽是列的个数,高是行的个数,然后又r、g、b三个通道;

4维,例如RGB图片的批量,学习时通常不是一张一张图去读,而是一个batch(一个批量)读好多张;

2、创建数组

需要:形状、每个元素的数据类型、每个元素的值

3、访问元素

最后一个,从开头到最后,跳着访问,每3行一跳,就是把第0行、第3行拿出来

4、代码用jupyter打开,在chapter_preliminaries/ndarray.ipynb

ctrl+enter运行选中的单元格

代码中函数的介绍看代码里的备注


(1)

(2)广播机制

注意:有时候其实代码写错了,但是仍然能跑!

在某些情况下,即使形状不同,我们仍然可以通过调用 广播机制(broadcasting mechanism)来执行按元素操作。 这种机制的工作方式如下:首先,通过适当复制元素来扩展一个或两个数组, 以便在转换之后,两个张量具有相同的形状。 其次,对生成的数组执行按元素操作。

(3)节省内存问题

运行一些操作可能会导致为新结果分配内存。 例如,如果我们用Y = X + Y,我们将取消引用Y指向的张量,而是指向新分配的内存处的张量。

Python的id()函数提供了内存中引用对象的确切地址(类似C中的指针)。 运行Y = Y + X后,会发现id(Y)指向另一个位置。 这是因为Python首先计算Y + X,为结果分配新的内存,然后使Y指向内存中的这个新位置。

before = id(Y)

Y = Y + X

id(Y) == before

结果:False

执行原地操作:可以使用切片表示法将操作的结果分配给先前分配的数组,例如Y[:] = <expression>

before= id(Y)

Y[:]= Y+ X

id(Y)== before

结果:True

before = id(X)

X += Y

id(X) == before

结果:True

(3)转换为其他Python对象

(4)下面例子中的reshape,并不是创建了一个新的对象b,而是创建了一个wheel,所以改b会把a一起改掉。



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容