连接在“ for循环”中

时间:2018-10-28 19:37:16

标签: python concatenation

我在目录(例如dir)中有2个netCDF文件(分别称为1.nc和2.nc)。 由于它们是相同的,所以我有一个函数可以从每个函数中读取所需的变量:

varA = myfunction(1.nc)
varB = myfunction(2.nc)

我键入的位置:

varA.shape 
varB.shape

我得到了尺寸(对于varA和varB):

(31,180,360)

现在,我将它们与:

BB = np.concatenate((varA,varB))

我得到尺寸:

BB.shape
(62,180,360)

这就是我想要的。

但是,如果我尝试在for循环中自动执行相同的工作(如果我有50个相似的文件),我会写:

for fname in sorted(glob.glob(dir +'*.nc')):
    print fname
    BB = np.concatenate((myfunction(fname)),axis=0)

print语句给出1.nc和2.nc(按预期)和

myfunction(fname)是我想要的变量的读取,尺寸与以前一样为(31,180,360)。 循环后得到的是具有尺寸的BB:

BB.shape
[5580, 360]

知道为什么吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

问题是因为您没有在np.concatenate调用中串联任何内容。每次循环中,您的集合中的每个BB只会覆盖fname中存储的内容。

您需要做的是将BB传递给您的串联,以便您继续添加。

BB = np.empty([0, 180, 360])  # Init BB as empty array with correct shape

for fname in sorted(glob.glob(dir +'*.nc')):
    print fname
    BB = np.concatenate((BB, myfunction(fname)), axis=0)  # Concat together BB and myfunction call

我对numpy不太熟悉,因此创建空数组部分的格式可能与数据的形状不匹配。因此,根据需要进行修改以匹配格式。