考虑下面的代码
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,但它并没有完全实现我想要的。我可以得到提示吗?谢谢你。
在 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