我有一个循环,不断检查api数据并将其添加到数组中。 然后,我根据要添加数组的数组的一列计算指标。唯一的问题是指标需要10个数据点才能进行。
import numpy as np
list_b = []
i = 0
while True:
i += 1
list_a = []
list_a.append(i)
list_a.append(33)
list_a.append(44)
list_b.append(list_a)
array = np.array(list_b, dtype=float)
if len(array) > 10:
x = indicator_function(array[:,0])
np.append(x) # in a 4th column
if i == 15:
break
print(array.shape)
print(len(array))
print(array)
问题是我无法追加到数组,因为它与以前的数组没有相同的尺寸。因此,如何将数组扩展一列,或者将新的指标值插入10行后的新列中。
数组应如下所示:
1 33 44
2 33 44
...
9 33 44
10 33 44
11 33 44 x
12 33 44 x
答案 0 :(得分:0)
据我了解,numpy不允许使用锯齿状的数组(列数不断变化的数组)。您可能必须创建一个全新的数组。或者,如果您想做一些疯狂的事情,可以将if
语句移到list_b.append(list_a)
上方,并将其更改为
if (i > 10):
x = indicator_function(array[:,0])
list_a.append(x)
else:
list_a.append(None)
答案 1 :(得分:0)
if i < 10:
list_a.append(i)
list_a.append(33)
list_a.append(44)
list_a.append(55)
list_b.append(list_a)
array = np.array(list_b, dtype=float)
if i > 10:
list_a.append(i)
list_a.append(33)
list_a.append(44)
list_a.append(66)
list_b.append(list_a)
array = np.array(list_b, dtype=float)
@sahil是的,可以。
答案 2 :(得分:0)
在numpy中不存在对正确的锯齿状数组的内置支持。适合您的应用的最佳选择可能是masked array:
import itertools
import numpy.ma as ma
array = None
list_b = []
def indicator_function(arr):
return -1
for i in itertools.count():
list_a = []
list_b.append(list_a)
list_a.append(i)
list_a.append(33)
list_a.append(44)
list_a.append(np.nan)
array = ma.MaskedArray(list_b)
# assign mask or indicator_function, as appropriate
ix = 10 + 1
array[:ix, -1] = ma.masked
array[ix:, -1] = indicator_function(array[:,0])
if i == 15:
break
这会导致带有array
字样的蒙版{1>
[[0.0, 33.0, 44.0, --],
[1.0, 33.0, 44.0, --],
[2.0, 33.0, 44.0, --],
[3.0, 33.0, 44.0, --],
[4.0, 33.0, 44.0, --],
[5.0, 33.0, 44.0, --],
[6.0, 33.0, 44.0, --],
[7.0, 33.0, 44.0, --],
[8.0, 33.0, 44.0, --],
[9.0, 33.0, 44.0, --],
[10.0, 33.0, 44.0, --],
[11.0, 33.0, 44.0, -1.0],
[12.0, 33.0, 44.0, -1.0],
[13.0, 33.0, 44.0, -1.0],
[14.0, 33.0, 44.0, -1.0],
[15.0, 33.0, 44.0, -1.0]]