我有一个2D数组.我想在一列上运行(反向)就地FFT.以下内容不会对数据产生任何变化:
ifft!( buf_FFT[:,ind_page], 1 )
以下按预期工作:
buf_FFT[:,ind_page] = ifft( buf_FFT[:,ind_page] )
答案可能很明显,但我是朱莉娅的新手,在搜索中找不到答案.我假设第一个版本不起作用,因为当我指定数组的子集时,Julia实际上制作了一个副本.该副本被操作但随后被丢弃.在第二个版本中,副本将被复制回原始数组.它是否正确?就地访问阵列子集的正确方法是什么?
请帮忙.谢谢!
正如您所猜测的那样,获取一个数组可以创建一个副本.就地ifft!函数在此副本上运行,因此不会影响原始数组.要在就地切片上操作,您应该显式创建一个视图.有许多方法可以创建视图,如下面的代码(on v0.5)所示.选择适合您上下文的一个.
buf_FFT = rand(Complex{Float64}, 10,10)
#in-place FFT on the first column of the matrix
ifft!( view(buf_FFT, 1:size(buf_FFT, 1),1), 1 )
#alternately, to save some typing:
ifft!( view(buf_FFT, Colon(), 1), 1 )
#Or, even simpler, use the @view macro
ifft!(@view(buf_FFT[:,1]), 1)
Run Code Online (Sandbox Code Playgroud)
文档:
编辑:由于Simon的评论如下,添加了@view宏.