我正在开发一个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)
为什么会这样?
答案 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
的数组的链接。