如何在n行之后将值添加到新列?

时间:2018-11-11 02:54:51

标签: numpy

我有一个循环,不断检查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

3 个答案:

答案 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字样的蒙版{

[[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]]