Максимум между массивом и числом

Когда используешь:

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

.. np.maximum?

Divakar 09.10.2018 13:54

Если вы просто получаете максимум между A и 0 (например, для relu), вы можете просто сделать A*(A>0)

Dan 09.10.2018 13:56

@Divakar О, верно! Я всегда думал, что np.max - это псевдоним для np.maximum, потому что я не мог найти никаких документов для np.max ... Эта ссылка не работает: docs.scipy.org/doc/numpy/reference/generated/numpy.max.html

Basj 09.10.2018 13:59

@Divakar, простите меня, но я думаю, что вопрос здесь связан с отсутствием документа для np.max / путаницей между np.max и np.maximum, а не с «условно объединить два массива numpy одинаковой формы». В моем заголовке говорится, что все наоборот: условно сравнить массив и число (очевидно, не той же формы).

Basj 09.10.2018 14:01

@Basj Что ж, np.maximum, как указано в связанном дублировании вопросов и ответов, работает со всеми транслируемыми формами и не обязательно с одинаковыми формами, и поэтому работает и здесь. Вопрос, который я здесь прочитал, был - How to get the same directly with a numpy function, such as np.max? и np.maximum работают отлично, как снова сказано там.

Divakar 09.10.2018 14:04

@Basj Это четко прописано в принятом решении - Similarly, there's np.minimum for finding element-wise minimum values between two arrays of same or broadcastable shapes..

Divakar 09.10.2018 14:05

Да @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 09.10.2018 14:14

@Basj Вы спрашиваете: np.??max(array, single-number) и np.maximum(array1, array2) - это решение. Я не уверен, в чем именно заключается путаница?

Divakar 09.10.2018 14:17

@Basj Термин broadcastable решает эту проблему за вас. У нас не может быть n вопросов по Stackoverflow, соответствующих Maximum between a 1D array and a number, Maximum between a 2D array and a number и т. д., У всех из которых будет одно и то же решение. Таким образом, Stackoverflow будет затоплен.

Divakar 09.10.2018 14:21

@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 09.10.2018 19:24

@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 09.10.2018 19:38

Вы, конечно, правы @Divakar, но если бы я пришел к этому вопросу от Google: Как условно объединить два массива numpy такой же формы, я бы подумал, что это не связано с этой проблемой (не зная вещание) ... Ничего страшного, все равно спасибо за вашу помощь.

Basj 09.10.2018 21:11
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
12
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Большое спасибо! Я всегда думал, что np.max - это псевдоним np.maximum!

Basj 09.10.2018 13:58

@Basj: это не так. похоже, это псевдоним для np.amax (хотя в документации это четко не указано)

blue_note 09.10.2018 13:59

Другие вопросы по теме