#julia
#julia
Вопрос:
Я попытался оптимизировать свой код с помощью @view. Но я не знаю, следует ли мне использовать @view, если фрагмент массива находится в левой части.
Сначала я знал, что @view может снизить затраты при использовании в правой части, например, так :
a = @view b[:]
Но если левая часть также является фрагментом массива. Я не знаю значения @view .
Например, смотрите Код ниже
using BenchmarkTools
a = ones(50,100)
b = zeros(50,50)
@benchmark a[:,1:25] = b[:,1:25]
@benchmark a[:,1:25] = @view b[:,1:25]
Второе распределение с помощью @view выполняется быстрее. И эта операция больше похожа на копирование, потому что, если я изменю элемент в b, a не изменится.
Итак, мой вопрос в том, что означает @view в этом случае? Должен ли я использовать @view в этой ситуации? Почему я меняю элементы в a, b не изменится?
В этом случае второе распределение кажется более быстрым, но я обнаружил, что использование @view может замедлить работу моей программы при использовании в большем случае.
Ответ №1:
a[:,1:25] = b[:,1:25]
создает массив для b[:,1:25]
, а затем копирует элемент за элементом a[:,1:25] = @view b[:,1:25]
, пропускает первую часть, что приводит к отсутствию распределений и повышению производительности.