使用列表推导进行索引?可能吗?

时间:2015-07-23 15:55:32

标签: python numpy list-comprehension

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

这是有效的代码:

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

3 个答案:

答案 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