我有一个大小为MxN的浮点数数组A,我想进行以下操作:
对于A的每一列,统计小于某个阈值(例如0.5)的元素数量。
Julia中最快的方法是使用零初始化结果向量,然后按列遍历数组A并根据需要增加结果向量。使用for循环很容易实现,例如:
对于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时,它的顺序与内存中的布局相同,并且不会分配不必要的额外空间。但是,我不确定如何使用广播运算符 .<=0.5、sum 等来实现这一点。一种方法是
sum(A .<= 0.5, dims=1)
但这样分配新的内存来执行操作,速度大约比计数函数慢2-3倍(我测试了高达8000x8000的数组)。是否可能在只使用少量代码(例如第二种方法)的情况下实现计数函数的性能?