Когда используешь:
import numpy as np
A = np.array([1,2,-3,-1, 0,3,-1])
print [max(A[j], 0) for j in range(len(A))]
при желании получаем [1, 2, 0, 0, 0, 3, 0].
Как получить то же самое напрямую с помощью функции numpy, такой как np.max?
print max(A, 0) # ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
print np.max(A, 0) # 3
print np.max(A, 0, axis=0) # argument axis not working
print np.amax(A, 0) # 3
Если вы просто получаете максимум между A и 0 (например, для relu), вы можете просто сделать A*(A>0)
@Divakar О, верно! Я всегда думал, что np.max - это псевдоним для np.maximum, потому что я не мог найти никаких документов для np.max ... Эта ссылка не работает: docs.scipy.org/doc/numpy/reference/generated/numpy.max.html
@Divakar, простите меня, но я думаю, что вопрос здесь связан с отсутствием документа для np.max / путаницей между np.max и np.maximum, а не с «условно объединить два массива numpy одинаковой формы». В моем заголовке говорится, что все наоборот: условно сравнить массив и число (очевидно, не той же формы).
@Basj Что ж, np.maximum, как указано в связанном дублировании вопросов и ответов, работает со всеми транслируемыми формами и не обязательно с одинаковыми формами, и поэтому работает и здесь. Вопрос, который я здесь прочитал, был - How to get the same directly with a numpy function, such as np.max? и np.maximum работают отлично, как снова сказано там.
@Basj Это четко прописано в принятом решении - Similarly, there's np.minimum for finding element-wise minimum values between two arrays of same or broadcastable shapes..
Да @Divakar, но и в вопросе, и в основной части ответа говорится, что это противоположно тому, о чем я здесь спрашиваю;) Я спрашиваю о np.??max(array, single-number), и этот связанный вопрос касается: We could use NumPy built-in np.maximum, made exactly for that purpose - np.maximum(array1, array2), так что это похоже на «две разные проблемы, имеющие то же решение (с использованием np.maximum) ", но не" тот же вопрос ".
@Basj Вы спрашиваете: np.??max(array, single-number) и np.maximum(array1, array2) - это решение. Я не уверен, в чем именно заключается путаница?
@Basj Термин broadcastable решает эту проблему за вас. У нас не может быть n вопросов по Stackoverflow, соответствующих Maximum between a 1D array and a number, Maximum between a 2D array and a number и т. д., У всех из которых будет одно и то же решение. Таким образом, Stackoverflow будет затоплен.
@Divakar Необходимо всего два вопроса: Maximum between (n-dim) array and (n-dim) array (это касается np.maximum (A, B) с A а также B 1D, 2D или 1000D;)) и Maximum between (n-dim) array and a single number. Это последний вопрос. Но это разные вещи.
@Basj Ну, тогда есть массивы с разным количеством димов, например (2,3,4) против (3,4), которые транслируются друг против друга. Итак, снова у вас будут: Maximum between (n dim) array and (n-1 dim) и Maximum between (n dim) array and (n-2 dim) и так далее. Снова бесконечное количество вопросов по SO, чтобы его залить. Термин broadcastable, как указано в принятом решении для связанного дублирования, является ключевым, поскольку он охватывает все сценарии, включая те, которые указаны в начале этого комментария, ваш вопрос (это тоже касается широковещательной передачи) и связанные вопросы и ответы.
Вы, конечно, правы @Divakar, но если бы я пришел к этому вопросу от Google: Как условно объединить два массива numpy такой же формы, я бы подумал, что это не связано с этой проблемой (не зная вещание) ... Ничего страшного, все равно спасибо за вашу помощь.






Это просто np.maximum(A, 0). В отличие от функции np.max, она принимает аргументы два и сравнивает их поэлементно. В вашем случае, поскольку второй аргумент является скалярным значением, сравнение будет выполняться вещание it.
Большое спасибо! Я всегда думал, что np.max - это псевдоним np.maximum!
@Basj: это не так. похоже, это псевдоним для np.amax (хотя в документации это четко не указано)
..
np.maximum?