使用For循环附加到Numpy

时间:2016-10-05 18:08:56

标签: python arrays numpy

我正在开发一个Python脚本,它接收实时流数据并将其附加到numpy数组中。但是我注意到如果我逐个追加到四个不同的数组,它就可以了。例如:

openBidArray = np.append(openBidArray, bidPrice)
highBidArray = np.append(highBidArray, bidPrice)
lowBidArray = np.append(lowBidArray, bidPrice)
closeBidArray = np.append(closeBidArray, bidPrice)

但是如果我执行以下操作则不起作用:

arrays = ["openBidArray", "highBidArray", "lowBidArray", "closeBidArray"]

for array in arrays:
    array = np.append(array, bidPrice)

为什么会这样?

2 个答案:

答案 0 :(得分:2)

请改为:

arrays = [openBidArray, highBidArray, lowBidArray, closeBidArray]

换句话说,您的列表应该是一个数组列表,而不是一个恰好包含您碰巧定义的数组名称的字符串列表。

您的下一个问题是np.append()会返回附加项目的数组副本,而不是附加到位。您将此结果存储在array中,但array将在下一次迭代时从列表中分配下一个项目,并且修改后的数组将丢失(当然,最后一个除外)在循环结束时在array中。因此,您需要将每个已修改的数组存储回列表中。要做到这一点,您需要知道它来自哪个插槽,您可以使用enumerate()

for i, array in enumerate(arrays):
    arrays[i] = np.append(array, bidPrice)

当然,这不会更新原始变量openBidArray等等。您可以在循环后使用解包来执行此操作:

openBidArray, highBidArray, lowBidArray, closeBidArray = arrays

但是在某些时候,将数组存储在列表中(或者如果需要通过名称访问它们,则将字符存储起来)更有意义,而不是使用单独的变量。

N.B。如果你在这里使用常规的Python列表而不是NumPy数组,那么其中一些问题就会消失。列表上的append()是就地操作,因此您不必将修改后的数组存储回列表或解压缩到各个变量。如果您真的需要NumPy功能,那么可以使用列表进行所有附加,然后将它们转换为数组。

答案 1 :(得分:1)

在第二个示例中,您有字符串,而不是np.array对象。您正尝试将数字(?)附加到字符串。

字符串" openBidArray"不会保存任何名为openBidArray的数组的链接。

相关问题