Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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 在循环中创建大Numpy数组的正确方法?_Python_Arrays_Numpy - Fatal编程技术网

Python 在循环中创建大Numpy数组的正确方法?

Python 在循环中创建大Numpy数组的正确方法?,python,arrays,numpy,Python,Arrays,Numpy,我有一个函数(getArray),它返回大小为(1,40)的Numpy数组,假设它返回: [-0.385 -0.385 -0.405 -0.455 -0.485 -0.485 -0.425 -0.33 -0.22 -0.07 0.12 0.375 0.62 0.78 0.84 0.765 0.52 0.17 -0.165 -0.365 -0.435 -0.425 -0.37 -0.33 -0.325 -0.335 -0.345 -0.33 -0.325 -

我有一个函数(getArray),它返回大小为(1,40)的Numpy数组,假设它返回:

[-0.385 -0.385 -0.405 -0.455 -0.485 -0.485 -0.425 -0.33  -0.22  -0.07   0.12   0.375  0.62   0.78   0.84   0.765  0.52   0.17  -0.165 -0.365 -0.435 -0.425 -0.37  -0.33  -0.325 -0.335 -0.345 -0.33  -0.325 -0.315 -0.31  -0.32 -0.335 -0.34  -0.325 -0.345 -0.335 -0.33  -0.335 -0.33 ]
然后在循环中,我需要创建包含getArray函数返回的多个数组的Numpy数组,该数组的大小可以是(2000,40)。这样做的正确方式是什么

如果我在循环中创建Numpy数组,我需要在每次迭代中创建新数组,这不是我想要的。现在,我首先创建了Numpy数组列表,然后从列表中创建了数组。它可以很好地工作,直到行数超过255。之后,阵列将从2D更改为1D

我还尝试使用vstack函数将行添加到数组中。当最后一个数组的大小为(255,40)时,这会很好地工作。以下是我使用的代码:

A = numpy.empty((0,40), float)
for value in values:
    meas = getArray(value)
    A = numpy.vstack([A, meas])
print(A.shape)
print(A)
如果最多有255行,我得到以下结果

(255, 40)
[[-0.385 -0.385 -0.405 ..., -0.33  -0.335 -0.33 ] [-0.425 -0.445 -0.475 ..., -0.375 -0.395 -0.41 ] [-0.41  -0.435 -0.465 ..., -0.4   -0.4   -0.415] ...,  [-0.47  -0.495 -0.495 ..., -0.425 -0.425 -0.43 ] [-0.5   -0.52  -0.57  ..., -0.455 -0.445 -0.435] [-0.515 -0.57  -0.62  ..., -0.39  -0.41  -0.385]]
当有超过255行时,我得到以下错误

ValueError:除连接轴之外的所有输入数组维度必须完全匹配

编辑:

以下工作:

array = numpy.empty((size,total_window_size))
for index, value in enumerate(values):
    meas = getArray(value)
    if meas.size == total_window_size:
        array[index] = meas

如果您知道循环的迭代次数(例如,在
for
循环中),您可以在循环之前使用如下适当的大小初始化数组:

result = np.empty((nbIterations, 40))
for i in range(nbIterations):
    result[i] = getArray(parameters)
getArray
是否总是返回相同的值?如果是这种情况,您还可以使用

return = np.tile(getArray(), nbIterations).reshape((nbIterations, -1))
创建数组


一般来说,对于这类事情使用列表不是一个好方法,因为它们往往很慢:每当您向列表添加一个项目时,必须修改
RAM
中列表的结构,这对于长列表来说需要很长时间。因此,您应该使用
numpy
arrays-

通常我建议将数组附加到列表中,并在末尾执行一个
vstack
。列表追加相对较快。我不知道你为什么会得到255以上的错误。您确定您的函数仍返回相同大小的数组吗?可能getArray返回的数组比上次调用的预期数组小,谢谢