Evite alocação de memória ao indexar uma matriz em Julia
Pergunta, questão: Eu gostaria de indexar em uma matriz sem disparar a alocação de memória, especialmente ao passar os elementos indexados para uma função. Ao ler os documentos de Julia, suspeito que a resposta gire em torno do uso dosub
função, mas não consigo ver como ...
Exemplo de trabalho: Eu construo um grande vetor deFloat64
(x
) e, em seguida, um índice para todas as observações emx
.
N = 10000000
x = randn(N)
inds = [1:N]
Agora eu tempomean
função sobrex
ex[inds]
(Eu corromean(randn(2))
primeiro para evitar irregularidades do compilador no tempo):
@time mean(x)
@time mean(x[inds])
É um cálculo idêntico, mas, como esperado, os resultados dos tempos são:
elapsed time: 0.007029772 seconds (96 bytes allocated)
elapsed time: 0.067880112 seconds (80000208 bytes allocated, 35.38% gc time)
Portanto, existe uma maneira de contornar o problema de alocação de memória para escolhas arbitrárias deinds
(e escolha arbitrária de matriz e função)?