Julia中矢量化函数的错误:"数组无法广播到通用大小"

时间:2015-08-22 01:07:54

标签: julia

我在尝试评估Julia中的以下函数时遇到错误(版本0.3.11,2015-07-27 06:18 UTC,LinuxMint Rebecca):

# this_script.jl
# global parameters
c = [ 1.0 , 2.0]
u = [-1.0 , 3.5]

# A simplified version of a more complicated function
function f(x,y)
    xi = c .* (x/y - u)

    1.0 + sum( erfi(xi) )
end

@vectorize_2arg Number f

我可以评估f(2,1)f(2+im,1)

等内容
x=linspace(-2,2,4);
f(x,x)

y=rand(4,4)
f(y,y)

但是,以下行会引发错误:

u=repmat(x,1,4)
f(u,u)

ERROR: arrays could not be broadcast to a common size
 in broadcast_shape at broadcast.jl:40
 in .* at broadcast.jl:278
 in f at operators.jl:377
 in include at ./boot.jl:245
 in include_from_node1 at ./loading.jl:128
while loading this_script.jl, in expression starting on line 103

之后,即使使用ff(2,1),我仍无法评估f(x,x)。请注意,uy具有相同的尺寸和类型。

我该如何处理?

1 个答案:

答案 0 :(得分:1)

问题是您已将u更新为4x4,但c仍为双元素向量。

julia> c,u
([1.0,2.0],
4x4 Array{Float64,2}:
 -2.0       -2.0       -2.0       -2.0
 -0.666667  -0.666667  -0.666667  -0.666667
  0.666667   0.666667   0.666667   0.666667
  2.0        2.0        2.0        2.0     )

julia> c.*(1/2-u)
ERROR: DimensionMismatch("arrays could not be broadcast to a common size")

(顺便说一句,请注意cu之类的全局字母可以是performance trap,除非它们被标记为const。)