我在目录(例如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]
知道为什么吗?
非常感谢!
答案 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不太熟悉,因此创建空数组部分的格式可能与数据的形状不匹配。因此,根据需要进行修改以匹配格式。