@просмотр, когда обе стороны уравнения являются фрагментом массива в Julia

#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] , пропускает первую часть, что приводит к отсутствию распределений и повышению производительности.