注意:我在这里做出假设,因为我不熟悉 .H5 文件和访问它们的 Python 代码。
我认为正在发生的事情是,当您“加载”数组时,您实际上并没有加载数组。相反,我认为对象是在文件之上构建的。它可能会读取与文件组织方式相关的维度和信息,但不会读取整个文件。
该对象非常好地模仿了一个数组,以至于当您稍后执行切片操作时,可以执行正常的 Python 切片操作,但此时正在读取实际数据。这就是为什么与“加载”所有数据相比,切片需要这么长时间。
由于以下原因,我得出这个结论。
如果您正在阅读 75 帧 3584x3584 像素,我假设它们是未压缩的(H5 似乎只是数据的原始转储),在这种情况下,75 * 3.584 * 3.584 = 963.379.200,大约是 918MB数据的。再加上你在 180 毫秒内“阅读”这个,我们得到这个计算:
918MB / 180ms = 5.1GB/second reading speed
请注意,此数字适用于 1 字节像素,这也不太可能。
因此,这种速度似乎不太可能,因为即使是当今最好的 SSD 也能达到低于 1GB/秒的速度。
似乎更合理的是,一个对象只是在文件之上构建,并且切片操作会产生读取至少 1 帧数据的成本。
如果我们将速度除以 75 来获得每帧速度,则 1 字节像素的读取速度为 68MB/秒,而 24 或 32 位像素的读取速度高达 270MB/秒。更有道理。