gpt4 book ai didi

julia - Julia 中的向量矩阵元素明智乘法(按行),有效

转载 作者:行者123 更新时间:2023-12-04 01:38:31 24 4
gpt4 key购买 nike

我想将矩阵 A 的每一行乘以相同的向量 v。例如

A =[1.0 3.0; 1.0 1.0]
v = [1.0, 2.0]

我想输出
 [1.0 6.0; 1.0 2.0]

到目前为止,我正在做:
(v.*A')'

但我怀疑这在计算上是否有效,因为我将矩阵转置了两次。

请注意,此问题已在 Matlab ( https://uk.mathworks.com/matlabcentral/answers/243307-vector-matrix-multiplication-row-wise ) 中得到解答

最佳答案

您至少有以下选择:

  • (v.*A')' (OP 的建议)
  • v'.*A ( 最短路径 )
  • mapslices(row->v.*row, A, 2)
  • 来自@AborAmmar 的帖子的手动实现( 最快的方式 )

  • IE。
    function tt(v, A)
    r = similar(A)
    @inbounds for j = 1:size(A,2)
    @simd for i = 1:size(A,1)
    r[i,j] = v[j] * A[i,j] # fixed a typo here!
    end
    end
    r
    end

    速度对比 (按升序排列)
    julia> @btime tt($v,$A); # @AborAmmar's answer
    38.826 ns (1 allocation: 112 bytes)

    julia> @btime ($v)'.*$A;
    49.920 ns (1 allocation: 112 bytes)

    julia> @btime (($v).*($A)')';
    123.797 ns (3 allocations: 336 bytes)

    julia> @btime mapslices(row->($v).*row, $A, 2);
    25.174 μs (106 allocations: 5.16 KiB)

    编辑:从@AborAmmar 的帖子(替换旧帖子)中进行了更仔细和更快的手动实现,并更新了速度比较。

    关于julia - Julia 中的向量矩阵元素明智乘法(按行),有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48460875/

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