引言
话说npy能存储哪些数据类型?
数字,字符串,图片......
如果你喜欢,甚至可以将视频存起来(可以分割成一帧帧图片,然后存起来)。
如果这些数据属于隐私,你甚至可以加上密码。因为存成矩阵以后,你就可以随意给其中的数字进行各种加密操作(比如凯撒加密)
正如我之前讲过的图片加密。
如果本期点赞超过100,那么我们挖个坑,以后写一个视频加密的代码
正文
之前公众号讲过excel文件的读取与存储。用python读写excel非常有用,因为很多数据都是用excel存储的,但是也有一个致命的弱点,那就是用python读取excel非常的慢,尤其是excel非常大的时候。因为excel不是专门为python量身定做的文件格式。将数据从excel读取到python本身就要消耗巨量的算力。
为了让我们的工作更有效率。
今天来介绍一种为python量身定做的文件存储方式,那就是存储成npy文件。
这种读取方式的优点在于,它是和python里面的数据格式之间吻合的,比如说,在python内存里面的列表,存储成npy以后依然是列表,如果将这个npy文件重新读取出来,那么这个数据依然是列表。
下面,我们就来看几个例子。
看一看如何将python内存中的数据存成本地的npy。
一:npy存储列表或者数组。
我们要存储这样一个列表。
list1=[['TS07', 2], ['S015', 1], ['Y4', 1], ['C1010', 1], ['S5015', 1], ['W15', 1]]
这是一个二维列表,其中既有字符串,也有数字。
方法是先把列表变成array格式。用到的也是numpy里面的方法。
m=np.array(list1)
这样就能将numpy文件转化成array格式,然后就可以存储起来。
np.save('demo.npy',m)
也就是这样的代码,就可以存储成功。
如果我们想把npy文件读取出来。也是非常方便。
a=np.load('demo.npy')
graphTable=a.tolist()
print(type(graphTable))
print(graphTable)
其中重要的点是a.tolist,可以将读取的数据转化成列表,在接下来的代码中就可以直接调用。
此外,如果大家想用npy存储数组,也可以使用同样的方式,先转化为array格式,然后存储成npy。
二:用npy存储图片
把图片存储成npy格式,这一点相比大家非常陌生。
其实也不难理解。计算机存储图片,本质上就是把图片上每个像素点全部存储起来。这些像素点就是0--256之间的数字,本质上就是矩阵,而npy刚好可以把矩阵存储下来。
import numpy as np
import matplotlib
from matplotlib import image
img = matplotlib.image.imread('test.jpg')
arr = np.array(img)
np.save('image1.npy',arr)
其中matplotlib就可以将图片读取成矩阵的格式,然后再用之前讲过的np.save,就可以把这个矩阵存储起来。
就是这样的效果。
其中那个image.npy就是存储起来的"图片"
那么如何将存成npy的图片读取出来,让它显示成一个图片呢?
请看下面的方法
最后存储的npy文件本质上就是一个矩阵,把这个矩阵读取出来,还是可以转化成一个图片。然后将图片显示出来。
import numpy as np
import PIL
from PIL import Image
arr = np.load('image1.npy')
img = PIL.Image.fromarray(arr)
img.show()
图片显示效果如下。
封面来源:Pexels