【发布时间】:2019-11-03 01:44:42
【问题描述】:
我有一个 MxN 浮点数组 A,我想做以下操作: 对于 A 的每一列,计算小于某个阈值(例如 0.5)的元素的数量。
Julia 执行此操作的最快方法是用零初始化结果向量,然后逐列遍历数组 A 并在需要时递增结果向量。例如,使用 for 循环执行此操作很容易
function count(A)
(cols, rows) = size(A)
result = fill(0, cols)
for j in 1:rows
for i in 1:cols
result[i] += A[i,j] <= 0.5
end
end
end
这会按照它在内存中的布局顺序遍历 A,并且它不会分配不需要的额外空间。但是,我不确定如何使用例如广播运营商来完成此操作。
sum(A .<= 0.5, dims=1)
但这分配新内存只是为了执行操作,并且比计数函数慢大约 2-3 倍(我对高达 8000x8000 的数组进行了测试)。只用几行代码就可以达到count-function的性能(如第二种方法)?
【问题讨论】:
标签: arrays optimization multidimensional-array julia