I’m wondering if anyone can help me understand the following. I want to replace a subset of matrix
A with matrix
B. I understand this can be done efficiently using
for loops or
copyto!. I am specifically interested in the behavior of the following case.
The following does not allocate.
A = zeros(5, 5) B = ones(3, 3) * 2 function viewtest!(A, B) tmp = @view A[2:4, 2:4] tmp .= B return nothing end @allocated viewtest!(A, B) # 0
This function does allocate.
function broadcasttest!(A, B) A[2:4, 2:4] .= B end @allocated broadcasttest!(A, B) # 64
I think in
broadcasttest! the code
A[2:4, 2:4] means I am creating a slice of an array which is going to allocate? Is that why? My initial expectation was this would also have zero allocation because it is an inplace operation (I think) reflected by the