gpt4 book ai didi

julia - 复制数组列

转载 作者:行者123 更新时间:2023-12-02 15:54:39 24 4
gpt4 key购买 nike

我有一个算法,需要将数组的一列替换为同一数组的另一列。我尝试用切片和元素来做到这一点。

const M = 10^4
const N = 10^4
A = rand(Float32, M, N)
B = rand(Float32, N, M)

function copy_col!(A::Array{Float32,2},col1::Int,col2::Int)
A[1:end,col2] = A[1:end,col1]
end

function copy_col2!(A::Array{Float32,2},col1::Int,col2::Int)
for i in 1:size(A,1)
A[i,col2] = A[i,col1]
end
end

[Both functions+rand are called here once for compilation]

@time (for i in 1:20000 copy_col!(B, rand(1:size(B,2)),rand(1:size(B,2)) ); end )
@time (for i in 1:20000 copy_col2!(B, rand(1:size(B,2)),rand(1:size(B,2)) ); end )

>> 0.607899 seconds (314.81 k allocations: 769.879 MB, 25.05% gc time)
>> 0.213387 seconds (117.96 k allocations: 2.410 MB)

为什么使用切片进行复制的性能如此差?有没有比 copy_col2! 更好的方法?

最佳答案

A[1:end,col1] 首先复制索引列,然后复制到 A[1:end,col2] 所以 copy_col ! 分配更多并且运行时间更长。在这种情况下,subsliceview 可以弥补分配问题。

关于julia - 复制数组列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36185365/

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