python读取字符串数组_在memmap模式下读取一个numpy的字符串数组

本文介绍了在Python中尝试使用memmap模式读取包含字符串的numpy数组时遇到的错误,包括ValueError和数据乱码问题。通过分析问题,找到了解决方案,即在保存时直接保存numpy数组而非字典,然后使用`allow_pickle=True`加载,最后在memmap模式下成功读取数据。
摘要由CSDN通过智能技术生成

我创建了这个numpy数组,并将其存储在磁盘中,如下所示:

s = (b'foo', b'bar', b'baz', b'buzz')

def build_numpy_array():

return np.fromiter((s for _ in range(200)), dtype=[('foo','S40'),

('bar', 'S40'), ('baz', 'S40'),

('buzz', 'S40')

])

np.save('data.dat', {'data': build_numpy_array()})

这很好np.load('data.dat.npy')

但是,我想在memmap模式下使用它。所以这失败了

np.load('data.dat.npy',mmap_mode='r')

ValueError: Array can't be memory-mapped: Python objects in dtype.

这给出了奇怪的编码

np.memmap('data.dat.npy', mode='r',dtype=[('foo','S40'),

('bar', 'S40'), ('baz', 'S40'),

('buzz', 'S40')

])

(b'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用NumPy中的`np.memmap`函数来初始化一个`memmap`对象。`memmap`是一种能够将大型数组保存在磁盘上的数据结构,可以在需要时进行内存映射,以便节省内存空间。下面是一个示例代码,演示了如何使用`np.memmap`来初始化一个`memmap`对象: ```python import numpy as np # 定义数组的形状和数据类型 shape = (1000, 1000) # 数组形状 dtype = np.float32 # 数据类型 # 创建一个空的memmap对象,并将其映射到磁盘上的文件 filename = 'memmap_array.dat' # 文件名 memmap_array = np.memmap(filename, dtype=dtype, mode='w+', shape=shape) # 填充数组数据 memmap_array[:] = np.random.random(shape) # 输出数组的一部分内容 print(memmap_array[:10, :10]) # 关闭memmap对象,使其保存到磁盘 del memmap_array ``` 在上述示例中,我们首先定义了数组的形状和数据类型。然后,我们创建了一个空的`memmap`对象,通过指定文件名、数据类型和形状来初始化。接下来,我们可以像操作普通的NumPy数组一样,对`memmap`对象进行操作和赋值。最后,我们通过删除`memmap`对象来关闭它,并将其保存到磁盘上的文件中。 请注意,`mode='w+'`参数用于指定`memmap`对象的打开模式。这里的`'w+'`表示以读写模式打开文件,如果该文件不存在,则创建一个新文件。你可以根据需要调整这个参数来满足你的要求。 希望这个示例能帮助到你!如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值