#python #arrays #numpy
#python #массивы #numpy
Вопрос:
У меня небольшая проблема с np.where, и я не могу найти никаких ответов в Google, так что вот мой вопрос. Подумайте, что у меня есть эти массивы:
a = np.array([[1, 0.5, 2], [5, 0.25, 9], [-1, 0.77, 3]])
b = np.array([0.6, 0.2, 0.6])
Чего я хочу, так это: if a[x, 1] < b[x] then a[x, 0] else a[x, 2]
.
Итак, я хочу получить это:
[1, 9, 3]
Я думал, что такой код будет работать, но это не так
np.where(a[1] < b, a[0], a[2])
Ответ №1:
Вы почти поняли это:
np.where(a[:,1] < b, a[:,0], a[:,2])
Вам нужно указать, по какой оси вы хотите проводить сравнения, и взять элементы, иначе по умолчанию будет использоваться ось 0, проверьте значения для:
a[1]
a[1,:]
a[:,1]
Убедитесь, что первые два совпадают (поведение по умолчанию), и вы ищете третий.
Комментарии:
1. Спасибо, что ответил на мой вопрос 🙂 и у меня есть еще одна проблема. В моем коде массив
a
имеет 5 элементов подряд, и при том же условии я хочу взять первые 2 элемента или последние 2 элемента, и когда я использую подобный кодnp.where(a[:,2] < b, (a[:,0], a[:,1]), (a[:,3], a[:,4])
, я получаю массив только с 2 строками, и моя цель состоит в том, чтобы каждая строка содержала 2 элемента это(a[:,0], a[:,1])
или(a[:,3], a[:,4])
2. Немного сложнее, но попробуйте это:
np.where(a[:,1].reshape(1,-1) < b.reshape(1,-1), a[:,0:2].T, a[:,2:4].T)
, то есть, если я понял, какой ваш желаемый результат, даже если нет, вы, вероятно, можете взять его оттуда 🙂3. Что-то не сработало, но я в конце концов решил проблему, спасибо :). Не могли бы вы порекомендовать какой-нибудь источник знаний, чтобы обойти python и numpy? Я сильно перегружен этим языком … .
4. cs231n.github.io/python-numpy-tutorial похоже, это хорошее место для начала.
5. Большое спасибо за вашу помощь, добрый сэр, благослови!