gpt4 book ai didi

julia - 在行上迭代矩阵的推荐方法是什么?

转载 作者:行者123 更新时间:2023-12-03 07:03:59 24 4
gpt4 key购买 nike

给定一个矩阵m = [10i+j for i=1:3, j=1:4],我可以通过切片矩阵来迭代其行:

for i=1:size(m,1)
print(m[i,:])
end

这是唯一的可能性吗?这是推荐的方式吗?

那么理解呢?切片是迭代矩阵行的唯一可能性吗?

[ sum(m[i,:]) for i=1:size(m,1) ]

最佳答案

您自己列出的解决方案以及mapslices都可以正常工作。但如果“推荐”的真正意思是“高性能”,那么最好的答案是:不要迭代行。

问题是,由于数组是以列优先顺序存储的,因此对于小矩阵以外的任何东西,您最终都会得到一个糟糕的 cache hit ratio如果您按行优先顺序遍历数组。

正如 excellent blog post 中指出的那样,如果您想对行求和,最好的选择是执行以下操作:

msum = zeros(eltype(m), size(m, 1))
for j = 1:size(m,2)
for i = 1:size(m,1)
msum[i] += m[i,j]
end
end

我们按照 native 存储顺序遍历 mmsum,因此每次加载缓存行时,我们都会使用所有值,从而产生缓存命中率为 1 .您可能天真地认为最好以行主序遍历它并将结果累积到 tmp 变量,但在任何现代计算机上,缓存未命中比 msum[ i] 查找。

Julia 的许多内部算法都采用 dims 关键字(例如 sum(m; dims=2)),可以为您处理此问题。

关于julia - 在行上迭代矩阵的推荐方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21778374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com