2013-12-12 91 views
2

我有一个包含多个.npy文件(numpy数组)的目录,每个文件都有一个2维数组(相同的宽度和高度)。我需要读取所有文件并生成一个包含目录中所有数组的三维数组,结果形状应该像(文件数,宽度,高度)。用numpy导入数组文件

到目前为止我的代码:

import os 
import numpy 

for file in os.listdir(os.getcwd()): 
    result = numpy.load(file) #Obviously this doen't work 

但我就是根本不知道如何生成结果阵列。我应该先创建一个零数组然后填充它吗?我可以在飞行中做这个吗? 你能帮我吗?

+2

['np.dstack(阵列)'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.dstack.html#numpy.dstack) – user2357112

+2

随着numpy,定义一个零数组并填充内容通常是一个好习惯。 – leeladam

+0

等待,dstack命令的轴不同于我的想法。您可能需要使用切片重新排序或使用其他内容。 – user2357112

回答

2

如果您知道有多少和大小是多少,请首先创建一个空数组。 (空数组速度更快,因为你没有零的所有元素。)事情是这样的:

# Allocate empty array. 
bigarray = numpy.empty([width, height, len(filenames)]); 
# Load files. 
for i in range(len(filenames)): 
    bigarray[:,:,i] = numpy.load(filenames[i]); 

如果你不事先知道尺寸,使用numpy.append。这很慢,因为它必须在每次迭代中分配一个新的内存块并复制数据。尝试:

# Load first array. 
bigarray = numpy.load(filenames[0]); 
# Add a new axis to make it 3D. 
bigarray = bigarray[numpy.newaxis,...]; 
# Load rest of arrays. 
for i in range(1,len(filenames)): 
    bigarray = numpy.append(bigarray, numpy.load(filenames[i])[numpy.newaxis,...], axis=0); 
+0

非常好的答案,谢谢。 –