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一起改掉。
网友评论