Я новичок в Юлии и стараюсь сделать свою программу максимально эффективной. Моя программа должна много вычислять с матрицами, и я наткнулся на оператора вещания, который сильно все ускорил. Однако теперь я нашел еще один своеобразный способ сделать расчет.
Первая версия была: (оба являются матрицами NxN) `
hist .= hist .+ mask
Мой алгоритм, включающий эту строку, выполнялся примерно за 1 секунду на итерацию.
Теперь я подумал, давайте будем умнее и объединим .=
и .+
Поэтому я попробовал .+=
, так как +=
работает, и мне просто нужно было это транслировать. Однако, как вы, возможно, знаете, это не сработало.
Случайно я попробовал эту версию моего кода:
hist .=+ mask
И что удивительно, это сократило время выполнения до 0,2 секунды.
Может кто-нибудь объяснить мне значение .=+
и почему это не .+=
? Или это даже то же самое?
Заранее спасибо!
Обновлено:
моя IDE была проблемой, почему .+=
не работал. Однако это правильный способ сделать это!
.+=
действительно правильный способ трансляции +=
, поэтому я не уверен, почему вы говорите, что «как вы, возможно, знаете, это не сработало». Он должен работать. С другой стороны, .=+
— бессмысленный оператор, и, вероятно, он просто делает .=
Спасибо за разъяснение. По какой-то причине .+= выдало ошибку, поэтому я предположил, что .=+ - правильный способ сделать это. Я ценю разъяснение!
Как указано в комментариях, .=+
не является оператором в Юле. Вы ищете .+=
.
Чтобы объяснить наблюдаемое вами поведение, hist .=+ mask
анализируется как hist .= (+mask)
, что в данном случае эквивалентно широковещательному назначению hist .= mask
, которое присваивает каждому элементу mask
соответствующий элемент hist
. Это быстрее, чем hist .+= mask
, потому что .=+
не делает то, что вы думали. Он пропускает добавление.
Разве это не просто
hist .= +mask
, что означаетhist .= mask
и, таким образом, сильно отличается отhist .+= mask
. Вы проверяли результаты?