numpy快速读写列表和图片

引言

话说npy能存储哪些数据类型?

数字,字符串,图片......

如果你喜欢,甚至可以将视频存起来(可以分割成一帧帧图片,然后存起来)。

如果这些数据属于隐私,你甚至可以加上密码。因为存成矩阵以后,你就可以随意给其中的数字进行各种加密操作(比如凯撒加密)

正如我之前讲过的图片加密。

python凯撒加密图片

如果本期点赞超过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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值