Сначала я попробовал Поменяйте местами два значения в массиве numpy.
Но эта, казалось бы, простая проблема приводит к ошибкам индекса или неверным результатам, поэтому я должен что-то делать не так ... но что?
import numpy as np # Swap 1 and 3, leave the 0s alone! i = np.array([1, 0, 1, 0, 0, 3, 0, 3]) # Swaps incorrectly i[i==1], i[i==3] = 3, 1 # IndexError i[i==1, i==3] = i[i==3, i==1] # IndexError i[[i==1, i==3]] = i[[i==3, i==1]] # IndexError ix1 = np.argwhere(i==1) ix3 = np.argwhere(i==3) i[[ix1, ix3]] = i[[ix3, ix1]] # Swaps incorrectly i[np.argwhere(i==1)], i[np.argwhere(i==3)] = 3, 1
>>> import numpy as np >>> i = np.array([1, 0, 1, 0, 0, 3, 0, 3]) >>> i array([1, 0, 1, 0, 0, 3, 0, 3]) >>> a, b = i ==3, i == 1 # save the indices >>> i[a], i[b] = 1, 3 >>> i array([3, 0, 3, 0, 0, 1, 0, 1])
Вы использовали своп кортежа, чтобы поменять значения.Это не самый безопасный способ для массивов NumPy.Ответ на ваш вопрос уже опубликован.
https://stackoverflow.com/a/14933939/11459926