关于MNIST如何保存图片,见上一篇。 1.append()
image.append(int.from_bytes(image_dataset.read(1), byteorder='big', signed=False)) 对image列表进行追加, 每次追加的东西是image_dataset这个文件里的一个字节。 image[]列表中的是一个图片的像素点列表 整合成image(用来保存一张图片的所有的像素点) 的像素点。 注意像素点之后还要reshape一次,把一张图片的像素点变成28*28的格式append()函数用于在列表末尾添加新的对象。
list.append(obj) 其中: list:列表对象; obj:添加到列表末尾的对象。 注意:append()函数无返回值,但是会修改原本的列表。2.int.from_bytes函数
MNIST程序: int.from_bytes(label_dataset.read(1), byteorder='big', signed=False) 则说明每次读取一个字节,字节顺序为big,无符号功能:res = int.from_bytes(x)的含义是把bytes类型的变量x,转化为十进制整数,并存入res中。其中bytes类型是python3特有的类型。 函数参数:
int.from_bytes(bytes, byteorder, *, signed=False)。 在IDLE或者命令行界面中使用help(int.from_bytes)命令可以查看具体介绍。 bytes是输入的变量; byteorder主要有两种: 'big'和'little';signed=True表示需要考虑符号位。例:int_s = int.from_bytes(s, byteorder=‘little’, signed=True),其中s=’\xf1\xff’ 分析一下过程,’\x’表示十六进制数,先把’f1’写成二进制数:1111 0001,‘ff’同上:1111 1111.由于s的高低位标志是’little’,即’f1’是低位,‘ff’是高位,所以正确的顺序应该是’fff1’,即11111111 1111 0001.又因为要考虑符号位,第一位是1,所以s是负数,要进行取反加一才是正确的十进制数(第一位符号位的1不变),可以得到10000000 00001111,写成十进制,就是-15,也就是int_s的结果。上面的例子中,如果signed=False,则无符号位;若byteorder=‘big’,则输入s的左边是高位,右边是低位。
则输出:int_s=-15。
from_bytes函数