Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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 3.x 保存和加载大numpy矩阵_Python 3.x_Numpy_H5py - Fatal编程技术网

Python 3.x 保存和加载大numpy矩阵

Python 3.x 保存和加载大numpy矩阵,python-3.x,numpy,h5py,Python 3.x,Numpy,H5py,下面的代码是我如何保存numpy阵列的,保存后大约为27GB。有超过200K的图像数据,每个形状为(224,3) 这是我用来加载数据的方法,加载需要几个小时 features_train = np.zeros(shape=(1,224,224,3)) hf = h5py.File('cropped data/features_train.h5', 'r') for key in hf.keys(): x = hf.get(key) x = np.array(x)

下面的代码是我如何保存numpy阵列的,保存后大约为27GB。有超过200K的图像数据,每个形状为(224,3)

这是我用来加载数据的方法,加载需要几个小时

features_train = np.zeros(shape=(1,224,224,3))    
hf =  h5py.File('cropped data/features_train.h5', 'r') 
for key in hf.keys():
    x = hf.get(key)
    x = np.array(x)
    features_train = np.append(features_train,np.array([x]),axis=0) 
hf.close()

那么,对于如此大的数据量,有谁有更好的解决方案吗

您没有告诉我们您的服务器有多少物理RAM, 但27 GiB听起来像“很多”。 考虑把你的跑步分成几个较小的批次。< /P> java land中有一个古老的saw,它会问“为什么有二次运行时?”, 那就是,“为什么这么慢?”

String s=“”
对于(int i=0;i<1e6,i++){
s+=“x”;
}
答案是,到最后,, 在每一次迭代中,我们都会读到大约一百万个字符 然后写它们,然后附加一个字符。 成本为O(1e12)。 标准解决方案是使用StringBuilder,这样我们就回来了 到预期的O(1e6)

在这里,我担心调用
np.append()
会将我们推入二次区域

要进行验证,请将
功能\u train
分配替换为简单的评估 对于np.array([x]),我们花了一些时间计算,然后立即丢弃 每个迭代中的值。 如果这个猜想是正确的,那么运行时间将小得多

要解决此问题,请避免调用
.append()
。 相反,使用
np.zeros()预先分配27 GiB
(或)
然后在循环中分配每个新读取的数组
插入其预分配插槽的偏移量。

线性运行时将使任务更快地完成。

谢谢,我认为这可能是加载时间过长的原因。RAM是32GB顺便说一句,append在循环中效率很低。追加到一个列表,并在末尾进行一次连接。在开始时,我使用list追加每个数据,然后将其转换为numpy。但这会导致内存错误。你是什么意思?一个连接在最后
features_train = np.zeros(shape=(1,224,224,3))    
hf =  h5py.File('cropped data/features_train.h5', 'r') 
for key in hf.keys():
    x = hf.get(key)
    x = np.array(x)
    features_train = np.append(features_train,np.array([x]),axis=0) 
hf.close()
String s = ""
for (int i = 0; i < 1e6, i++) {
    s += "x";
}