向量化乘法:在 Julia 中按元素相乘两个向量

Vectorized multiplication: Multiply two vectors in Julia, element-wise

我决定深入 Julia 并碰壁;快.

我正在尝试复制一个简单的操作,在 python numpy

中如下所示
a = numpy.array([1,2,3])
b = numpy.array([1,2,3])
a*b
[output]: [1,4,9]

换句话说,“[1,4,9]”是我期望的输出。

我在 Julia 中尝试了以下操作:

a = [1,2,3]
b = [1,2,3]
a*b
[output]: MethodError: no method matching *(::Array{Int64,1}, ::Array{Int64,1})

或在尝试聪明起来之后:

a = [1,2,3]
b = [1,2,3]'
a*b
[output]: 3×3 Array{Int64,2}:
 1  2  3
 2  4  6
 3  6  9

我知道这似乎是一个基本问题,但我的谷歌搜索似乎不是我今天最好的 and/or Whosebug 可以使用这个问题和答案 ;)

感谢您的帮助和指点!

最佳

我刚刚找到了一个解决方案,虽然肯定不是最优的,因为它会生成一个点积,然后 select 对角线......需要大量计算!\

use LinearAlgebra
a = [1,2,3]
b = [1,2,3]
c = a * b'
diag(c)

我很确定有更好的解决方案。

茱莉亚需要一个 .在运算符或函数调用之前表明您想要逐元素乘法而不是对向量作为一个单元的运算。这称为广播数组:

 julia> a = [1,2,3]          
 3-element Array{Int64,1}:   
 1                          
 2                          
 3                          

 julia> b = [1,2,3]          
 3-element Array{Int64,1}:   
 1                          
 2                          
 3                          

 julia> a .* b               
 3-element Array{Int64,1}:   
 1                          
 4                          
 9