在朱莉娅中将标量添加到数组中

Van*_*eer 4 arrays scalar julia

试图得到线性方程y = m*x + c。我有以下几行代码,试图向数组添加标量。

m = 1.1; c = 0.11;
x = rand(1,2)
  1×2 Array{Float64,2}:
  0.920045  0.660015

y = m*x + c
ERROR: MethodError: no method matching +(::Array{Float64,2}, ::Float64)
Closest candidates are:
  +(::Any, ::Any, ::Any, ::Any...) at operators.jl:502
  +(::Bool, ::T<:AbstractFloat) where T<:AbstractFloat at bool.jl:112
  +(::Float64, ::Float64) at float.jl:395
  ...
Stacktrace:
 [1] top-level scope at none:0
Run Code Online (Sandbox Code Playgroud)

当前使用Julia 1.0。直接向数组添加标量不起作用。我以前认为在以前的版本中可以正常工作。

标量乘法工作

m*x
 1×2 Array{Float64,2}:
 1.01205  0.726016
Run Code Online (Sandbox Code Playgroud)

但是我必须定义另一个数组,然后如图所示执行加法。

c = [0.11 0.11]
y = m*x + c
1×2 Array{Float64,2}:
 1.12205  0.836016
Run Code Online (Sandbox Code Playgroud)

这不是开销吗?当我可以m*x对数组执行标量乘法但不能对加法进行运算时,它有什么区别?

nor*_*ok2 7

我想这已经变得更加严格了。采用Julia语法(如中的MATLAB),+*在全等数组上进行操作。

对于按元素操作,应使用.+.*。奇怪的是,这似乎并不重要,*但确实如此+

无论如何,以下两项工作均可:

y = m * x .+ c
Run Code Online (Sandbox Code Playgroud)

和:

y = m .* x .+ c
Run Code Online (Sandbox Code Playgroud)

  • 对*没关系,因为矩阵与标量的乘积是一个定义明确的运算(在数学意义上),但是您也可以广播它以获得相同的结果。另一方面,标量和矩阵的相加不是标准操作,因此您必须广播它。但是,如果要使用广播融合,则存在区别,那么您将需要在所有地方使用`.`。 (4认同)