我有以下代码:
x = range(100)
M = len(x)
sample=np.zeros((M,41632))
for i in range(M):
lista=np.load('sample'+str(i)+'.npy')
for j in range(41632):
sample[i,j]=np.array(lista[j])
print i
创建一个由sample_i numpy数组组成的数组。
sample0,sample1,sample3等是numpy数组,我的预期输出是Mx41632数组,如下所示:
sample = [[sample0],[sample1],[sample2],...]
如何在没有循环的情况下压缩并更快速地执行此操作? M也可以达到100万。
或者,如果起点是1000而不是0,我怎样才能附加我的样本数组?
提前致谢
答案 0 :(得分:0)
numpy非常简单。考虑这个例子:
import numpy as np
l = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
#create an array with 4 rows and 3 columns
arr = np.zeros([4,3])
arr[:,:] = l
您还可以单独插入行或列:
#insert the first row
arr[0,:] = l[0]
您必须提供相同的尺寸。
答案 1 :(得分:0)
通过避免内循环而不是将sample
初始化为零,您可以更快地使代码更快。
x = range(100)
M = len(x)
sample = np.empty((M, 41632))
for i in range(M):
sample[i, :] = np.load('sample'+str(i)+'.npy')
在我的测试中,这使读取代码从3秒到60毫秒!
通常,更改numpy数组的大小非常慢。以这种方式加载数据后,您可以追加一行:
sample = np.insert(sample, len(sample), newrow, axis=0)
但这几乎不是你想做的事,因为它太慢了。
如果M非常大,你可能会开始耗尽内存。
我建议您查看PyTables,这样您就可以将样本结果存储在一个HDF5文件中并操作数据而不将其加载到内存中。这通常比你现在使用的.npy文件快得多。