在Julia中从矩阵中减去向量的最佳方法

sho*_*oli 4 julia

在Julia中N从大小矩阵中减去长度向量的最佳方法是什么(N, K)

当然,for循环或repmat应该工作但它们似乎不是最有效的.

我可以用broadcast某种方式吗?

Tas*_*nou 8

julia> [1 2 3; 4 5 6; 7 8 9] .- [1; 2; 3]
3×3 Array{Int64,2}:
 0  1  2
 2  3  4
 4  5  6
Run Code Online (Sandbox Code Playgroud)

(很明显,还会广播减去水平向量)

julia> [1 2 3; 4 5 6; 7 8 9] .- [1 2 3]
3×3 Array{Int64,2}:
 0  0  0
 3  3  3
 6  6  6
Run Code Online (Sandbox Code Playgroud)

另请注意,.-顶部示例中的广播呼叫基本上等同于

julia> (-).([1 2 3; 4 5 6; 7 8 9], [1; 2; 3])
3×3 Array{Int64,2}:
 0  1  2
 2  3  4
 4  5  6
Run Code Online (Sandbox Code Playgroud)

从julia 0.6开始,统一f.(args)广播功能的语法/底层实现与广播运营商的实现.
(即.-不再是一个单独定义的运算符,恰好是'广播'版本-).

  • 也许你还可以提到你可以像这样在原地进行减法:`A.= A .- b`? (3认同)
  • 在julia的说法中,只有答案中的第一个操作是指"矩阵"和"矢量",第二个操作指的是两个"矩阵"(检查操作数的类型)通常你可能有变量作为操作数,所以你不能开始使用分号.如果你把`Matrix`和`Vector`作为变量:`a = [1 2 3; 4 5 6; 7 8 9]; b = [1,2,3] #standard使用逗号的向量; a .- b#给出了第一个例子; a .- b'#gives第二个例子 (2认同)
  • 实际上,"A [:] = A .- b`似乎进行了不必要的分配,并且速度较慢,因此最好使用"A.= A .- b`. (2认同)