Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从文件逐像素读取numpy阵列?_Python_Arrays_Python 3.x_File_Numpy - Fatal编程技术网

Python 从文件逐像素读取numpy阵列?

Python 从文件逐像素读取numpy阵列?,python,arrays,python-3.x,file,numpy,Python,Arrays,Python 3.x,File,Numpy,假设我有数千个2D numpy数组(每个数组的形状为600x600)保存在一个文本文件中。我想逐像素读取每个阵列的文件,并对这些像素的1D阵列进行操作,而不必加载整个文件,因为这将占用大量内存 例如,如果这在我的文件中: array([[1, 42, 98, ..., 2], ..., [89, 10, 76, ..., 2]]), array([[36, 79, 13, ..., 11], [81, 101, 34, ..., 109]]), ... 然后我想要(对于[0][0]职位)[1,

假设我有数千个2D numpy数组(每个数组的形状为600x600)保存在一个文本文件中。我想逐像素读取每个阵列的文件,并对这些像素的1D阵列进行操作,而不必加载整个文件,因为这将占用大量内存

例如,如果这在我的文件中:

array([[1, 42, 98, ..., 2], ..., [89, 10, 76, ..., 2]]), array([[36, 79, 13, ..., 11], [81, 101, 34, ..., 109]]), ...
然后我想要(对于[0][0]职位)
[1,36,…]
,对于[0][1]我想要
[42,79,…]
等等。在对每个1D阵列进行操作之后,我想将其从内存中删除,然后继续读取下一个阵列。这可能吗?如果其他类型的文件可以更好地工作,它也不必来自文本文件。

您可以使用。使用
mmap_模式
参数设置为True,像往常一样加载阵列。从文档中:

创建存储在磁盘二进制文件中的阵列的内存映射

内存映射文件用于访问磁盘上大文件的小段,而无需将整个文件读入内存。NumPy的memmap类似于数组 对象

你可以和我一起工作。使用
mmap_模式
参数设置为True,像往常一样加载阵列。从文档中:

创建存储在磁盘二进制文件中的阵列的内存映射

内存映射文件用于访问磁盘上大文件的小段,而无需将整个文件读入内存。NumPy的memmap类似于数组 对象


谢谢,如果我通过
pickle
,逐元素将数组转储到二进制文件中,这是否有效?您将数组作为二进制文件转储到磁盘上。如何做到这一点:。然后,正如ans中提到的,只需在内存映射模式下加载。我需要将数组逐个转储到文件中,以节省内存。不幸的是,
np.save
没有一个
append
模式,如果我使用像
pickle
这样的其他东西逐个转储,我似乎无法获得
np.load
以在
memmap
中使用。您知道处理此问题的方法吗?虽然
pickle
可以保存多个数组(使用
np.save
作为数组pickler),但
unpickle
不像
load
那样实现
mmap\u模式。使用
save/load
将数组的数据缓冲写入文件
mmap_模式允许
load
读取该缓冲区的部分内容。如果使用
pickle
文件,则该文件包含多个数组的数据缓冲区(由头块分隔)。它不是与memmap兼容的文件。谢谢,如果我通过
pickle
,逐元素将数组转储到二进制文件中,这是否有效?您将数组作为二进制文件转储到磁盘上。如何做到这一点:。然后,正如ans中提到的,只需在内存映射模式下加载。我需要将数组逐个转储到文件中,以节省内存。不幸的是,
np.save
没有一个
append
模式,如果我使用像
pickle
这样的其他东西逐个转储,我似乎无法获得
np.load
以在
memmap
中使用。您知道处理此问题的方法吗?虽然
pickle
可以保存多个数组(使用
np.save
作为数组pickler),但
unpickle
不像
load
那样实现
mmap\u模式。使用
save/load
将数组的数据缓冲写入文件
mmap_模式允许
load
读取该缓冲区的部分内容。如果使用
pickle
文件,则该文件包含多个数组的数据缓冲区(由头块分隔)。它不是与memmap兼容的文件。