尝试获取一个线性方程 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
目前使用的是 Julia 1.0 版本。直接将标量添加到数组中无效。我猜在以前的版本中这是可以的。
标量乘法有效。
m*x
1×2 Array{Float64,2}:
1.01205 0.726016
但我需要定义另一个数组,然后执行如下加法。
c = [0.11 0.11]
y = m*x + c
1×2 Array{Float64,2}:
1.12205 0.836016
这不是多余的吗?在数组上执行标量乘法m*x
与加法有什么区别?
*
来说并没有关系,因为矩阵乘以标量是一种定义良好的操作(在数学意义上),但是你也可以使用广播来获得相同的结果。另一方面,标量和矩阵的加法不是一个标准操作,所以你必须进行广播。然而,如果你想要使用广播合并,那么你需要在每个地方使用.
,这是有区别的。 - Bogumił Kamiński