如何删除具有特定值的行并修改二维数组中的列值?

时间:2018-05-30 01:28:49

标签: python arrays python-3.x numpy multidimensional-array

举一个我需要做的非常简单的例子,我有一个二维数组:

array([[0, 4],[2, 3],[4, 1],[0, 8],[3, 2],[4, 5],[6, 1],[0, 3],[1, 7],[2, 9]])

第一列是时间,另一列是距离。具体来说就是[time, distance]

对于我的最终数组,我需要删除每次= 0并继续时间。这是我的最终数组应该是:

array([[0, 4],[2, 3],[4, 1],[7, 2],[8, 5],[10, 1],[11, 7],[12, 9]])

在这种特殊情况下,只删除[0, 8][0, 3],因为它们的时间= 0。

此外,前一个[3, 2]变为[7, 2],因为4+3=7(因为之前的时间是4)。鉴于[4, 5],前一[8, 5]变为4+4=8也是如此。鉴于[6, 1],以前的[10, 1]变为4+6=10同样如此。

相同的前一个[1, 7]变为[11, 7],因为10+1=11(因为之前的时间是10)。 鉴于[2, 9]

,以前的[12, 9]变为10+2=12也是如此

我只是放了一小块数组,因此我需要一个Python代码来完成我刚刚解释的内容。

2 个答案:

答案 0 :(得分:1)

我想出了这个简短的代码而没有使用任何外部库:

array = [[0, 4],[2, 3],[4, 1],[0, 8],[3, 2],[4, 5],[6, 1],[0, 3],[1, 7],[2, 9]]
temp = 0
out = [array[0]]
for i in range(1,len(array)):
    if array[i][0] != 0:
        array[i][0] += temp
        out.append(array[i])
    else:
        temp = array[i-1][0]
print(out)

产生:

[out]: [[0, 4], [2, 3], [4, 1], [7, 2], [8, 5], [10, 1], [11, 7], [12, 9]]

答案 1 :(得分:1)

对@MansourZayer来说,这个方法稍微快一些但几乎完全相同。通常首选迭代列表中的项目而不是使用range()并索引到列表中,例如

In []:
x = [[0, 4],[2, 3],[4, 1],[0, 8],[3, 2],[4, 5],[6, 1],[0, 3],[1, 7],[2, 9]]
t0 = tminus = 0
r = [x[0]]
for t, d in x:
    if t == 0:
        t0 += tminus
        continue
    tminus = t
    r.append([t+t0, d])
r

Out[]:
[[0, 4], [2, 3], [4, 1], [7, 2], [8, 5], [10, 1], [11, 7], [12, 9]]