用列表理解建立索引?可能吗?

indexing with list comprehensions? Is it possible?

我现在这样做的方式看起来真的很笨拙。有没有更好的方法来索引这个数组?

这是有效的代码:

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 是列号。

您可以使用 enumerate 内置函数获取 (index, value) 的枚举对象并在结果对中使用索引。

如果性能有问题,您可以使用 numpy 枚举函数:ndenumerate.

这是一个可测试的例子,运行良好:

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))

我不确定 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]