11赞
593
当前位置:  开发笔记 > 编程语言 > 正文

在Julia中求和整数数组的有效方法

如何解决《在Julia中求和整数数组的有效方法》经验,为你挑选了2个好方法。

我有一个我想要修改的2D数组,以便将一行中的给定元素与其前面的所有元素相加,例如,如果我有一个数组:

[1 2; 3 6; 4 7; 4 8]

我希望能够将其转换为

[1 2; 4 8; 8 15; 12 23]

我可以使用julia中的以下代码片段来完成此操作:

for i in 1:10,
   for k in 2:size(d,1),
          d([k,i] += d[k-1,i)];
   end
end

但我认为必须有一种更有效的方法来做到这一点?



1> rcpinto..:

是的,有:cumsum

julia> d = [1 2; 3 6; 4 7; 4 8]
4x2 Array{Int64,2}:
 1  2
 3  6
 4  7
 4  8

julia> cumsum(d)
4x2 Array{Int64,2}:
  1   2
  4   8
  8  15
 12  23



2> tlnagy..:

根据@ tholy的评论,关于julia的令人敬畏的事情是内置函数并不特殊,并且不会比用户定义的函数神奇地快.它们都很快.我修改了你的功能,我得到了与内置相同的功能cumsum:

function testA!(arr)
    @inbounds for i in 1:size(arr, 2)
        tmp = arr[1, i]
        for k in 2:size(arr,1)
            tmp += arr[k, i]
            arr[k,i] = tmp
        end
    end
    arr
end

function testB!(arr)
    cumsum!(arr, arr)
end

我构建了测试数组:

arr = rand(1:100, 10^5, 10^2)
arr2 = copy(arr)

我得到了以下时间:

@time testA!(arr)
0.007645 seconds (4 allocations: 160 bytes)

@time testB!(arr2)
0.007704 seconds (4 allocations: 160 bytes)

这几乎是等价的.


推荐阅读
author-avatar
wing96333
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有