Цикл для выполнения операции над i + 1 в массиве numpy - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть пустой массив, я хотел бы взять 3 числа в каждой строке, минус их из следующей строки и сохранить эти значения в другом массиве.

что-то вроде

for i in array:
    a = i - i+1

Я знаю, что это очень неправильно, но, по крайней мере, это дает представление о том, чего я хочу.

Очевидно, что i + 1 просто приведет к значению + 1, и тогда все, что у меня есть, это a = 1,1,1

Когда я говорю, что я + 1, я имею в виду следующее в строке.

Так, например:

input = np.array([[4,4,5], [2,3,1],[1,2,0]])
output =  np.array([2,1,4],[1,1,1]) etc....

Каков наилучший способ сделать это итеративно для тысяч строк?

1 Ответ

0 голосов
/ 08 ноября 2018

IIUC, вместо зацикливания, вы можете просто сдвинуть свои массивы 1 вверх, используя np.roll, вычесть это из вашего исходного ввода и взять все полученные массивы, кроме последнего (потому что ничего не будет вычесть из последнего массива):

>>> inp = np.array([[4,4,5], [2,3,1],[1,2,0]])
>>> inp
array([[4, 4, 5],
       [2, 3, 1],
       [1, 2, 0]])
>>> (inp - np.roll(inp,-1,axis=0))[:-1]
array([[2, 1, 4],
       [1, 1, 1]])

Или, более простой способ - использовать numpy индексирование:

>>> inp[:-1] - inp[1:]
array([[2, 1, 4],
       [1, 1, 1]])
...