Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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_Vectorization - Fatal编程技术网

Python 矢量化-如何在没有循环的情况下为

Python 矢量化-如何在没有循环的情况下为,python,numpy,vectorization,Python,Numpy,Vectorization,我有以下代码: x = range(100) M = len(x) sample=np.zeros((M,41632)) for i in range(M): lista=np.load('sample'+str(i)+'.npy') for j in range(41632): sample[i,j]=np.array(lista[j]) print i 创建由示例数组组成的数组 sample0、sample1、sample3等是numpy阵列,我的

我有以下代码:

x = range(100)
M = len(x)
sample=np.zeros((M,41632))
for i in range(M):
    lista=np.load('sample'+str(i)+'.npy')
    for j in range(41632):
        sample[i,j]=np.array(lista[j])
     print i
创建由示例数组组成的数组

sample0、sample1、sample3等是numpy阵列,我的预期输出是Mx41632阵列,如下所示:

sample = [[sample0],[sample1],[sample2],...]
如何在没有循环的情况下使此操作更紧凑、更快速?M也可以达到100万

或者,如果起点是1000而不是0,我如何附加示例数组


提前感谢

使用numpy非常简单。考虑这个例子:

import numpy as np
l = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
#create an array with 4 rows and 3 columns
arr = np.zeros([4,3])
arr[:,:] = l
也可以分别插入行或列:

#insert the first row
arr[0,:] = l[0]
您只需提供相同的尺寸。

初始载荷 通过避免内部循环并且不将
sample
初始化为零,您可以使代码更快

x = range(100)
M = len(x)
sample = np.empty((M, 41632))
for i in range(M):
    sample[i, :] = np.load('sample'+str(i)+'.npy')
在我的测试中,读取代码的时间从3秒到60毫秒

添加行 通常,更改numpy数组的大小非常缓慢。加载数据后,可以通过以下方式追加行:

sample = np.insert(sample, len(sample), newrow, axis=0)
但这绝不是你想做的,因为它太慢了

更好的存储:HDF5 此外,如果M非常大,您可能会开始耗尽内存


我建议您看一下,这将允许您将示例结果存储在一个HDF5文件中,并在不将其加载到内存的情况下操作数据。这通常比您现在使用的.npy文件快得多。

请在您的问题中添加一个最小且可验证的示例。目前尚不清楚您正在处理的阵列类型以及预期的输出是什么。对于给您带来的不便,我们深表歉意。现在清楚了吗?@ USER2429,如果其中一个答案帮助了你,考虑接受或评论为什么它没有回答问题。谢谢。如何在没有循环的情况下快速加载数千个.npy阵列?问题是,循环需要数小时才能加载数千个阵列。我认为你无法回避这个问题。您可以使用优化的numpy方法附加到数组中,但我认为您无法加载文件。可能访问硬盘上的内存(加载文件)花费的时间最多,但您无法回避。但是,您可能希望在大阵列准备就绪时使用一些序列化(例如pickle)来保存它。然后你可以随时使用它。反序列化如此大的数组应该比加载数千个文件快得多。非常感谢!例如,一旦我存储了前5000个数据,是否有办法从5001重新启动代码,并将新值附加到存储的数组中?现在还不清楚重新启动代码是什么意思。您的意思是在上面的代码已经运行并且
sample
仍在内存中后,向
sample
添加额外的列吗?是的,正是这样,我添加了一个关于添加行的注释。一般来说,这不是你想要做的。如果要存储这么多数据(数百万行),我真的建议您尝试pytables。