Я новичок в Юлии и стараюсь сделать свою программу максимально эффективной. Моя программа должна много вычислять с матрицами, и я наткнулся на оператора вещания, который сильно все ускорил. Однако теперь я нашел еще один своеобразный способ сделать расчет.
Первая версия была: (оба являются матрицами 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. Вы проверяли результаты?