栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Redis中存储Numpy数组的最快方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Redis中存储Numpy数组的最快方法

我不知道它是否最快,但是您可以尝试类似的方法…

将一个Numpy数组存储到Redis就像这样-see function

toRedis()

  • 获得Numpy数组的形状并进行编码
  • 将Numpy数组作为字节附加到形状
  • 将编码的数组存储在提供的密钥下

检索一个Numpy数组是这样的-see function

fromRedis()

  • 从Redis检索与提供的密钥相对应的编码字符串
  • 从字符串中提取Numpy数组的形状
  • 提取数据并重新填充Numpy数组,重塑为原始形状

#!/usr/bin/env python3import structimport redisimport numpy as npdef toRedis(r,a,n):   """Store given Numpy array 'a' in Redis under key 'n'"""   h, w = a.shape   shape = struct.pack('>II',h,w)   enpred = shape + a.tobytes()   # Store enpred data in Redis   r.set(n,enpred)   returndef fromRedis(r,n):   """Retrieve Numpy array from Redis key 'n'"""   enpred = r.get(n)   h, w = struct.unpack('>II',enpred[:8])   a = np.frombuffer(enpred, dtype=np.uint16, offset=8).reshape(h,w)   return a# Create 80x80 numpy array to storea0 = np.arange(6400,dtype=np.uint16).reshape(80,80)# Redis connectionr = redis.Redis(host='localhost', port=6379, db=0)# Store array a0 in Redis under name 'a0array'toRedis(r,a0,'a0array')# Retrieve from Redisa1 = fromRedis(r,'a0array')np.testing.assert_array_equal(a0,a1)

您可以通过

dtype
对Numpy数组的以及形状进行编码来增加灵活性。我之所以没有这样做,是因为您可能已经知道所有数组都属于一种特定类型,然后代码会变得更大且更难于无故读取。

在现代iMac上的大致基准

80x80 Numpy array of np.uint16   => 58 microseconds to write200x200 Numpy array of np.uint16 => 88 microseconds to write

关键字 :Python,Numpy,Redis,数组,序列化,序列化,键,incr,唯一



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/393179.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号