Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用列表理解进行索引?可能吗?_Python_Numpy_List Comprehension - Fatal编程技术网

Python 使用列表理解进行索引?可能吗?

Python 使用列表理解进行索引?可能吗?,python,numpy,list-comprehension,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_li

我现在这样做似乎真的很笨拙。是否有更好的方法对此数组进行索引

这是有效的代码:

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 = (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)
但是我有一个语法错误。这可能吗?有什么理由这样做吗?或者说,它就像我已经拥有的一样慢?有更好的办法吗

编辑:

DEM\u文件名\u列表如下所示:

DEM = np.load([DEM_filename_list[t] for t in range(number_of_DEM_files)])
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数组中加载和存储数组的时间序列,以便您可以使用 DEM[t,i,j]

其中t是时间,i是行号,j是列号。

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


如果性能是一个问题,您可以使用numpy枚举函数:。

这是一个可测试的示例,效果很好:

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_files
不需要该行:

DEM = np.empty((number_of_DEM_files))

我不确定DEM文件的数量是否与DEM文件名列表有直接关系,我假设它是一对一,DEM文件名列表是可编辑的(按名称),在这种情况下,我会这样做

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\u filename\u list
?不相关但
DEM\u filename\u list[:DEM\u文件的数量]
会做与您的列表相同的比较您在
DEM文件的数量中缺少下划线
?我不认为为做简单的
,因为这很笨重,虽然我不明白第一行是做什么的。那么
DEM=[np.load(f)for f in DEM\u filename\u list]
呢?是否要使用来自不同文件的行值构建矩阵?不要在numpy中执行此操作。它将使您失去从矢量化中获得的所有性能增益。从范围中获得的性能与从枚举中获得的性能相似:这样,DEM就不再是numpy数组。您可能需要执行以下操作:
DEM=np.empty((2,2));DEM[:]=[np.load(ll)for ll in l]
取而代之。是的,我更新了,谢谢。请注意,正如我在更新中所写,在分配之前不需要任何操作。