У меня есть Numpy массив 2D, и я хочу, чтобы выполнить следующую операцию:Изменение некоторых Numpy столбцов массива в соответствии с логическим условием
Для каждого столбца в массиве, который представляет собой ряд неубывания значений, замените этот столбец с столбцом различий (т. е. каждая запись представляет собой разницу между двумя предыдущими).
Каждый столбец остается тем же (за исключением того, что первая строка удаляется, чтобы соответствовать размерности столбцов различий).
Например, в матрице:
[ [1,1,1,2,3,4]
[1,3,4,3,4,5]
[1,7,3,4,2,7] ]
Матрица разностей:
[ [0,2,3,1,1,1]
[0,4,-1,1,-1,2] ]
И, таким образом, третий и пятый столбцы, которые имеют уменьшающиеся значения останутся прежними, в то время как другие столбцы заменены столбцами разницы, в результате чего:
[ [0,2,4,1,4,1]
[0,4,3,1,2,2] ]
Я попробовал несколько вещи, как это:
tempX = np.diff(X, axis = 0).transpose()
return np.where(tempX >= 0, tempX, X[1:].transpose())
Но условие в np.where выполняется поэлементно, а не для каждого столбца (или строки). Как я могу изменить условие, чтобы оно работало?
Есть ли более эффективный способ реализации этого?
Не могли бы вы использовать большой массив в качестве образца и больше разнообразия в цифрах? – Divakar
Трудно понять, есть ли опечатка в вашем примере. ;) Полагаю, это должно быть «будет изменено на' [[0, 2, 1] [0, 4, 3]] '", правильно? – nostradamus
Я изменил пример, надеюсь, что теперь это яснее? – keren42