在追加模式下加载使用 numpy.save 保存的数组

2024-03-14

我在追加模式下使用 numpy.save() 保存数组:

f = open("try.npy", 'ab')
sp.save(f,[1, 2, 3, 4, 5])
sp.save(f,[6, 7, 8, 9, 10])
f.close()

我可以以 LIFO 模式加载数据吗? 也就是说,如果我现在希望加载 6-10 数组,我是否需要加载两次(使用 b):

f = open("try.npy", 'r')
a = sp.load(f)
b = sp.load(f)
f.close()

或者我可以直接加载第二个附加保存吗?


我对这种顺序保存和加载的工作原理感到有点惊讶。我认为没有记录(请纠正我)。但显然每个save是一个独立的单元,并且load读取到该单元的末尾,而不是文件的末尾。

想想每一个load as a readline。您不能只读取文件的最后一行;你必须阅读它之前的所有内容。

嗯 - 有一种方法可以读取最后一个 - 使用seek将读取的文件移动到特定点。但要做到这一点,你必须确切地知道所需的块从哪里开始。

np.savez是将多个数组保存到文件(或者更确切地说,保存到 zip 存档)的预期方法。


save保存两部分,一个包含如下信息的标头dtype, shape and strides,以及数组数据缓冲区的副本。这nbytes属性给出了数据缓冲区的大小。至少对于数字和字符串数据类型来说是这样。

savedoc 有一个使用打开的文件的示例 - 带有seek(0)倒带文件以供使用load.

np.lib.npyio.format有关于保存格式的更多信息。看起来可以通过读取头几个字节来确定头的长度。您可能可以使用模块中的函数来执行所有这些读取和计算。


如果我从示例中读取整个文件,我会得到:

In [696]: f.read()
Out[696]: 
b"\x93NUMPY\x01\x00F\x00
{'descr': '<i4', 'fortran_order': False, 'shape': (5,), }\n
 \x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00
\x93NUMPY\x01\x00F\x00
{'descr': '<i4', 'fortran_order': False, 'shape': (5,), }\n
 \x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\t\x00\x00\x00\n\x00\x00\x00"

我添加了换行符来突出显示该文件的不同部分。请注意,每个save以。。开始\x93NUMPY.

使用打开的文件f,我可以使用以下方式读取标题(或第一个数组):

In [707]: np.lib.npyio.format.read_magic(f)
Out[707]: (1, 0)
In [708]: np.lib.npyio.format.read_array_header_1_0(f)
Out[708]: ((5,), False, dtype('int32'))

我可以使用以下方式加载数据:

In [722]: np.fromfile(f, dtype=np.int32, count=5)
Out[722]: array([1, 2, 3, 4, 5])

我从中推断出这一点np.lib.npyio.format.read_array功能代码。

现在该文件位于:

In [724]: f.tell()
Out[724]: 100

这是下一个数组的头:

In [725]: np.lib.npyio.format.read_magic(f)
Out[725]: (1, 0)
In [726]: np.lib.npyio.format.read_array_header_1_0(f)
Out[726]: ((5,), False, dtype('int32'))
In [727]: np.fromfile(f, dtype=np.int32, count=5)
Out[727]: array([ 6,  7,  8,  9, 10])

我们现在处于 EOF 状态。

并且知道int32有4个字节,我们可以算出数据占用20个字节。因此,我们可以通过读取标头、计算数据块的大小以及seek越过它即可到达下一个数组。对于小型阵列来说,工作并不值得;但对于非常大的,它可能很有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在追加模式下加载使用 numpy.save 保存的数组 的相关文章

随机推荐

  • 更新推送接收时应用程序图标上的徽章计数 (IOS)

    我正在开发可以从服务器接收推送通知的应用程序 从服务器发送推送通知时 您可以指定要在应用程序图标上显示的徽章编号 现在这意味着您必须跟踪服务器上的徽章计数 这似乎不是一个好的方法 有没有什么好的替代方案 这样我就不需要跟踪服务器上的徽章编号
  • 在 NSView 上使用 NSPoint 鼠标跟踪

    我在 App Delegate 中有一个方法可以创建窗口和内容视图 但我希望能够在进入和退出视图时使用 NSPoint 跟踪鼠标 问题是我不想创建 NSView 自定义类 而是想在我的 AppDelegate 中完成这一切 鼠标跟踪 底部
  • 简单的 PowerShell LastWriteTime 比较

    我需要一个 PowerShell 脚本来访问文件的属性并发现最后写入时间属性并将其与当前日期进行比较并返回日期差 我有这样的东西 writedate Get ItemProperty Path source Name LastWriteTi
  • 使用 Android Studio 未选择渲染目标

    我的 Android Studio 在 Activity main xml 中显示此问题 渲染问题未选择渲染目标 帮助 您需要运行 AVD 管理器来添加与您的项目设置的目标 API 版本相匹配的虚拟设备 单击工具 gt Android gt
  • Maven:如何重命名项目的war文件?

    我有一个项目bird具有以下组件pom xml
  • 具有内联模型表单或表单集的基于 django 类的视图

    我有以下型号 class Bill models Model date models DateTimeField Date of bill null True blank True class Item models Model name
  • 未找到 JSF2.0 标签

    最近我一直在玩 JSF2 0 Richface 3 3 3 我使用 STS 作为我的 IDE 和 Maven 来构建我的项目 但不知何故我无法让以下 JSF2 0 标签工作 h button h link f 元数据 f viewParam
  • 如何解耦小部件的模型/视图

    我正在编写一个应用程序 用于绘制小部件 菜单 控件等以创建应用程序模型 每个屏幕都表示为小部件的集合 每个小部件都是简单的类 例如 class Model object def init self self widgets class Wi
  • 将长格式转换为宽格式

    id lt c 1 8 1 8 age1 lt c 7 5 6 7 8 6 9 5 8 7 6 3 9 5 age2 lt age1 round runif 1 1 3 1 age lt c age1 age2 tanner lt samp
  • ng-bootstrap 在 Angular 4 中不起作用

    我是 Angular 4 的新手 我正在尝试配置引导程序 我安装了 ng bootstrap https ng bootstrap github io getting started https ng bootstrap github io
  • 为 C++ 配置 Vim

    我想让 vim 成为我的 C 编辑器 我对此的使用经验很少 并需要帮助配置 vim 以使用 C 我需要这样的功能 代码完整 对于 stl 和我的课程 在 cc 和 h 文件之间切换 作为 C 和 Vim 大师 您可能还有更多技巧 也许您可以
  • 从 gcc/clang 获取 libasan 的位置

    当我编译时 fsanitize address GCC Clang 隐式使用 ASAN 动态库 为 ASAN 提供运行时支持 如果您构建的库是由另一个应用程序动态加载的 则需要设置LD PRELOAD包含此动态库 以便它在应用程序启动时运行
  • 为什么我不能在 setter 中放置属性名称而不是“value”关键字?

    当我通过 setter 中分配一个值时value关键字 它有效 但是 为什么当我尝试通过属性名称分配值时它不起作用 该属性应该保存相同的分配值 在下面的例子中 我使用valuesetter 中的关键字 它工作得很好 我得到了预期的输出 pr
  • 为什么C中释放的结构体仍然有数据?

    当我运行这段代码时 include
  • JavaScript 对象中的构造函数

    JavaScript 类 对象可以有构造函数吗 它们是如何创建的 使用原型 function Box color Constructor this color color Box prototype getColor function re
  • 重新网格化锯齿状测试数据

    背景 我有 4 组有刷直流电机的数据全部来自同一实验 扭矩与速度 T 与 w 扭矩与效率 T 与 n 扭矩与输入功率 T 与 Pin 扭矩与输出功率 T 与 Pout 然而 每个数据集都有 第一个和最后一个数据对的 x 值略有不同 每个数据
  • Java 中的关键字“transient”是什么意思? [复制]

    这个问题在这里已经有答案了 我在某处看到 transient private TrackDAO trackDAO 您可能首先看看什么序列化 http en wikipedia org wiki Serialization is 它标记一个成
  • 为什么语句“m = ++i ||”中的“k”不递增++j && ++k”? [复制]

    这个问题在这里已经有答案了 第 1 部分 i j k 1 m i j k printf d d d d n i j k m 输出 2 2 1 1 第一部分很容易理解 在这里 i j首先执行 这是正确的 并且增加 i 和 j 的值 因此不需要
  • Pandas:对列表的每个元素使用 groupby

    也许我错过了显而易见的事情 我有一个 Pandas 数据框 如下所示 id product categories 0 Silmarillion Book Fantasy 1 Headphones Electronic Material 2
  • 在追加模式下加载使用 numpy.save 保存的数组

    我在追加模式下使用 numpy save 保存数组 f open try npy ab sp save f 1 2 3 4 5 sp save f 6 7 8 9 10 f close 我可以以 LIFO 模式加载数据吗 也就是说 如果我现