我在尝试评估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
之后,即使使用f
也f(2,1)
,我仍无法评估f(x,x)
。请注意,u
和y
具有相同的尺寸和类型。
我该如何处理?
答案 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")
(顺便说一句,请注意c
和u
之类的全局字母可以是performance trap,除非它们被标记为const
。)