Обмен двух целых чисел в массиве numpy приводит к IndexError - PullRequest
0 голосов
/ 11 июня 2019

Сначала я попробовал Поменяйте местами два значения в массиве 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

Ответы [ 2 ]

1 голос
/ 11 июня 2019
>>> 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])
0 голосов
/ 11 июня 2019

Вы использовали своп кортежа, чтобы поменять значения.Это не самый безопасный способ для массивов NumPy.Ответ на ваш вопрос уже опубликован.

https://stackoverflow.com/a/14933939/11459926

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...