我现在这样做的方式看起来非常笨重。有没有更好的方法来索引这个数组?
这是有效的代码:
DEM = np.empty((number_of_DEM_files, DEMfile.shape[0], DEMfile.shape[1]), 'float')
for t in range(number_of_DEM_files):
DEM[t] = np.load(DEM_filename_list[t])
我尝试使用这样的列表推导:
DEM = np.load([DEM_filename_list[t] for t in range(number_of_DEM_files)])
但是我收到语法错误。这可能吗?是否有理由这样做,或者它和我已经得到的一样慢?还有更好的方法吗?
编辑:
DEM_filename_list如下所示:
DEM_filename_list = (D:/Documents/Data/grand_canyon_2015/03-11/dem1.npy,
D:/Documents/Data/grand_canyon_2015/03-11/dem2.npy,
D:/Documents/Data/grand_canyon_2015/03-11/dem3.npy,
etc)
第一行创建一个空的3d数组。最后,我试图在一个3d数组中加载和存储一系列时间序列,以便您可以使用 DEM [T,I,j]的
其中t是时间,i是行号,j是列号。
答案 0 :(得分:1)
这是一个可测试的例子,工作正常:
import numpy as np
a = np.array((1,2))
b = np.array((3,4))
with open('12', 'wb') as f:
np.save(f,a)
with open('34', 'wb') as f:
np.save(f,b)
l = DEM_filename_list
DEM = [np.load(ll) for ll in l]
print DEM
输出
[array([1, 2]), array([3, 4])]
或提供您的注释:
import numpy as np
DEM = [np.load(ll) for ll in DEM_filename_list]
print DEM
<强>输出:强>
DEM_files
<强>更新:强>
不需要行:
DEM = np.empty((number_of_DEM_files))
答案 1 :(得分:1)
我不确定 number_of_DEM_files 是否与 DEM_filename_list 有直接关系,我认为它是一对一的,DEM_filename_list是可迭代的(按名称),在这种情况下我会做这样的事情。
DEM = np.empty((number_of_DEM_files, DEMfile.shape[0], DEMfile.shape[1])
for i, t in enumerate(DEM_filename_list):
DEM[i] = np.load(t)
或
DEM = [np.load(t) for t in DEM_filename_list]
答案 2 :(得分:-1)
您可以使用enumerate内置函数来获取(index,value)的枚举对象,并在结果对中使用索引。
如果性能有问题,您可以使用numpy枚举函数:ndenumerate。