2017-01-17 14 views
1

Es gibt eine ähnliche Frage in C How to convert int array to int?; Eine solche Frage kann ich in Julia nicht finden.So konvertieren Sie "1-D-int-Array" in "int" in Julia (Jupyter Notebook)

Meine Frage ist folgende:

Es ist ein Fehler zu v[1] = x'*y enter image description here

Also ich versuche, den Grund zu finden und zeigen, dass:
enter image description here

jedoch x^Ty=2 so, wenn Sie geben direkt 2 ein, es ist Int64 und es gibt keinen Fehler, wie im Folgenden gezeigt:

enter image description here

Also, wie Array {Int64,1} zu Int 64,1 zu transfromieren?

+0

'arr_to_int {T <: Zahl} (x :: Vektor {T}) = Länge (x) == 1? Int (x [1]): error ("Input array hat kein Element") ' –

Antwort

1

Sie haben die entsprechende convert Methode zu definieren:

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

Oder im Allgemeinen

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

Beispiel:

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

Ergebnis:

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

Obwohl dies mit einem Häkchen markiert ist, ist die richtige Antwort in Wirklichkeit @Gnimuc 's unten. Der Ansatz hier kann alle Arten von Problemen verursachen, indem ein Vektor durch sein erstes Element ersetzt wird, wenn es an eine Funktion übergeben wird, die einen Skalar erwartet. –

5

Der Grund unter der Haube ist, dass Julia-0.5 immer noch nicht take vector transposes seriously eigentlich x' eine 1x2-Matrix ist:

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

Anscheinend möchten Sie das Skalarprodukt x und y, erhalten, aber technisch gesehen x'*y nicht die richtige Syntax ist, sollten Sie dot(x,y) oder \cdot[tab] verwenden:

julia> x ⋅ y 
2 

Dieses Problem bereits auf Julia-0,6-Master festgelegt wurde, durch eine neue Art der Einführung RowVector:

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

julia> x'*y 
2