在 Julia 中高效计算行总和和列总和

问题描述 投票:0回答:1

考虑下面的代码

test_vector = 1:100
group_size = 10
num_groups = div(length(test_vector), group_size)
res_1 = sum(reshape(test_vector, group_size, num_groups), dims=1)
res_2 = sum(reshape(test_vector, group_size, num_groups), dims=2)

这段代码满足了我的要求。本质上,我将向量重塑为 10x10 矩阵,并计算行总和和列总和。然而,有没有一种方法可以更有效地实现这一目标呢?我知道

reshape
每次都会分配内存。我打算在程序中多次重复此代码(即,我将其编写为函数,以
test_vector
group_size
作为参数,并多次调用它)。完成此任务最有效的方法是什么(就速度和随后的内存分配而言)?

我尝试调整代码here,但它并没有完全实现我想要的。我可以得到提示吗?谢谢你。

arrays memory julia reshape
1个回答
0
投票

在 Julia 中

reshape
没有分配。

julia> v1 = rand(100);

julia> @allocated v2 = reshape(v1, 10, 10)
96

(只存储整形信息,不复制数据)

这意味着改变原始的也会改变

reshape
:

julia> v1[1] = 99; @show v2[1,1];
v2[1, 1] = 99.0

事实上,两个变量都指向内存中的同一个位置:

julia> Int(pointer(v1)) == Int(pointer(v2))
true
© www.soinside.com 2019 - 2024. All rights reserved.