gpt4 book ai didi

arrays - Julia - 获取复杂数组的实部

转载 作者:行者123 更新时间:2023-12-04 11:34:58 25 4
gpt4 key购买 nike

我需要拆分变量 z::Array{Complex128,1}分为实部和复部两个数组。一种方法是创建新变量 ::Array{Float64,1}并逐个元素填充它们:

for i = 1:size(z)[1]
ri[i] = z[i].re
ii[i] = z[i].im
end

有没有一种不涉及复制数据的方法,比如以某种方式操纵 z 的步幅和偏移量? ?

最佳答案

在复制不是问题的常见情况下,只需执行 real.(z)imag.(z) .我包括这个是为了帮助 future 有类似问题但可能不关心复制的读者。

正如您所建议的,您可以操纵 z 的步幅。避免复制数据。简单地

zfl = reinterpret(Float64, z)
zre = @view zfl[1:2:end-1]
zim = @view zfl[2:2:end]

结合起来,我们观察到没有数据复制(分配是由于堆分配的数组 View ,并且是最小的)。
julia> z = Vector{ComplexF64}(100000);

julia> function reimvec(z)
zfl = reinterpret(Float64, z)
zre = @view zfl[1:2:end-1]
zim = @view zfl[2:2:end]
zre, zim
end
reimvec (generic function with 1 method)

julia> @time reimvec(z);
0.000005 seconds (9 allocations: 400 bytes)

正如我们所看到的,在幕后,这样的数组是跨步的:
julia> strides(reimvec(z)[1])
(2,)

关于arrays - Julia - 获取复杂数组的实部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39513478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com