Понимание массива Numpy, где проблема

#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. Большое спасибо за вашу помощь, добрый сэр, благослови!