Деление на большее значение вычитания - PullRequest
1 голос
/ 15 апреля 2020

У меня есть две матрицы формы (43, 25520), они называются m1 и m2.

if m1 <= m2:
    distance = (m1 - m2) / m2
else:
    distance = (m1 - m2) / m1

Так что для каждого индекса i я хочу вычесть m2[i] из m1[i] и разделите их на большее значение.

Мое сообщение об ошибке:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Как исправить ошибку и выполнить sh то, что я хочу.

1 Ответ

5 голосов
/ 15 апреля 2020

np.maximum возвращает поэлементный максимум из двух матриц:

(m1 - m2) / np.maximum(m1, m2)

Если вы хотите, чтобы только положительные значения были меньше единицы, используйте np.absolute:

np.absolute((m1 - m2) / np.maximum(m1, m2))

В качестве альтернативы вы можете сделать

(np.maximum(m1, m2) - np.minimum(m1, m2)) / np.maximum(m1, m2))

Причина, по которой вы получаете ошибку, состоит в том, что выражение m1 >= m2 является логической маской того же размера, что и оба массива. , Вы не можете преобразовать большой массив логических выражений в один логический, и даже если бы вы могли, выражения в if и else работают со всеми массивами. Вам нужно векторизовать условие, которое я показал вам, как это сделать.

...