Как удалить строки с определенным значением и изменить значения столбца в 2-D массиве? - PullRequest
0 голосов
/ 30 мая 2018

В качестве очень простого примера того, что мне нужно сделать, у меня есть двумерный массив:

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 голосов
/ 30 мая 2018

Немного более быстрый, но в значительной степени идентичный подход к @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]]
0 голосов
/ 30 мая 2018

Я придумал этот короткий код без использования каких-либо внешних библиотек:

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