Julia 沿dim 乘以每个矩阵

标签 julia matrix-multiplication

我有一个 3 维数组

x = rand(6,6,2^10)

我想将沿第三维的每个矩阵乘以一个向量。有没有比以下更干净的方法来做到这一点:
y = rand(6,1)
z = zeros(6,1,2^10)
for i in 1:2^10
    z[:,:,i] = x[:,:,i] * y
end

最佳答案

如果您正在处理矩阵,考虑 x 可能是合适的。作为矩阵向量而不是 3D 数组。那么你可以做

x = [rand(6,6) for _ in 1:2^10]
y = [rand(6)]
z = x .* y
z现在是向量的向量。

如果 z是预先分配的,那就是
z .= x .* y

而且,如果你想要它真的很快,请使用 StaticArrays 的向量。
using StaticArrays

x = [@SMatrix rand(6, 6) for _ in 1:2^10]
y = [@SVector rand(6)]
z = x .* y

这在我的计算机上显示了 10 倍的加速,运行时间为 12us。

关于 Julia 沿dim 乘以每个矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43801699/

相关文章:

julia - 相当于 Julia 中 R 的 dput

algorithm - 具有 block 加速的快速酉矩阵乘法

c++ - Eigen3 replicate() 用于矩阵 vector cwiseProduct 操作

julia - 为什么这个就地分配会分配更多内存?

arrays - Julia 中的静态数组?

types - 指定元组中的项目数

python - Matlab 中的高效矩阵乘法

arrays - 创建一个 View ,它是从不同列创建的向量?

CUDA 确定每个 block 的线程、每个网格的 block

python - 对两个向量使用 np.dot 有何效果?