2017-01-17 89 views
1

在C How to convert int array to int?中也有类似的问题;然而,我在朱莉娅身上找不到这样的问题。如何在Julia(Jupyter notebook)中将“1-D int array”转换为“int”

我的问题是:

有大约v[1] = x'*y enter image description here

错误所以我试图找到原因,并表明:
enter image description here

然而,x^Ty=2所以如果您直接键入2,它是Int64并且没有错误,如下所示:

enter image description here

那么如何从Array {Int64,1}转换为Int 64,1?

+0

'arr_to_int {T <:Number}(x :: Vector {T})= length(x)== 1? Int(x [1]):错误(“输入数组没有一个元素”) –

回答

1

你必须定义相应的转换方法:

Base.convert{T}(Float64, x::Array{T, 1}) = float(x[1]) 

或一般

Base.convert{T,K}(::Type{K}, x::Array{T, 1}) = Base.convert(K, x[1]) 

例子:

v = zeros(Complex{Float64}, 3) 
x = [1, 1] 
y = [1, 1] 
v1 = x'*y 
v[1] = v1 
v[2] = 45 
v[3] = 100 
v 

结果:

3-element Array{Complex{Float64},1}: 
    2.0+0.0im 
    45.0+0.0im 
100.0+0.0im 
+0

尽管这是用复选标记标记的,但正确的答案实际上是@Gnimuc的下面。这里的方法可能会导致各种问题,当传递给需要标量的函数时,将第一个元素替换为第一个元素。 –

5

引擎盖下的原因是,朱莉娅 - 0.5仍然不take vector transposes seriously,实际上,x'是一个1x2的矩阵:

julia> x' 
1×2 Array{Int64,2}: 
1 1 

显然,你想获得的xy点产品,但从技术上来讲x'*y不正确的语法,你应该使用dot(x,y)\cdot[tab]

julia> x ⋅ y 
2 

这个问题已经通过引入新型固定在朱莉娅 - 0.6主:

julia> x' 
1×2 RowVector{Int64,Array{Int64,1}}: 
1 1 

julia> x'*y 
2