我有函数(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-function向数组中添加行。当最终数组的大小(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
答案 0 :(得分:1)
如果您知道循环的迭代次数(例如在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
数组 -