#syntax #julia
#синтаксис #джулия
Вопрос:
Я очень новичок в языке Julia, поэтому я начал читать документацию и все встроенные функции. Сейчас я изучаю один проект github для своей работы. Поскольку мне удобнее работать с Python, я попытался перевести код Джулии на python по своему разумению, но у меня получилось несколько странных синтаксисов, которые я не понимал, и я застрял с ними. Может кто-нибудь указать мне значение этих синтаксисов? Заранее спасибо!
синтаксис, который я не понимаю
те строки кода Julia, которые я не понял, потому что я не нашел их ни в документации.
var1 = Tuple{Integer, Vector}[]
здесь мы объявляем object var 1, какой реальный пример для этого? какая версия python?
кроме того, если X::Matrix, n::Int
, то в чем смысл ?
приведенного ниже? Как я должен закодировать это на python?
K = [( i >= j ? dot(view(X,:,i), view(X,:,j)) : 0.0 )::Float64 for i=1:n, j=1:n]
как мы должны закодировать это на python?
Кроме того, я не уверен в значении ->
in ниже:
for i=1:n
id_i = find(x -> x[1] == i, var1)
xi_i_list = map(x -> x[2], var1[id_i])
how should we translate this into python?
наконец, я просто не понимаю значения .>
in ниже:
act= zeros(100)
alpha = zeros(10)
for i=1:100
idx = find(x::Tuple{Integer, Vector} -> x[1] == i, var1)
act[i] = sum(alpha[idx] .> 1e-3)
Как новичок, я пытаюсь понять роль find()
, map()
. К лучшему, я хотел бы написать приведенный выше код Julia с помощью Python. Но мне трудно понять код. Может ли кто-нибудь дать возможные интерпретации и соответствующие коды python для целей обучения? Заранее спасибо!
Комментарии:
1. x-ссылка: discourse.julialang.org/t /…
Ответ №1:
Прежде всего, документация Julia предлагает список примечательных отличий от Python. Теперь к каждому вопросу:
var1 = Tuple{Integer, Vector}[]
здесь мы объявляем object var 1, какой реальный пример для этого? какая версия python?
Vector
, для которого используется sugar Array{T,1} where T
, означает одномерный массив с элементами любого типа. Tuple{Integer, Vector}
таким образом, это кортеж с an Integer
и a Vector
, например, (1, [1, 2])
например. var1
это просто пустой вектор таких кортежей. Вы можете push!
использовать элементы, подобные последнему, var1
для создания «реального» примера:
julia> var1 = Tuple{Integer, Vector}[]
Tuple{Integer,Array{T,1} where T}[]
julia> push!(var1, (1, [1, 2]))
1-element Array{Tuple{Integer,Array{T,1} where T},1}:
(1, [1, 2])
julia> push!(var1, (2, [3.0, "foo", 4]))
2-element Array{Tuple{Integer,Array{T,1} where T},1}:
(1, [1, 2])
(2, Any[3.0, "foo", 4])
в чем смысл
?
Вы можете ввести ?
, чтобы получить доступ к режиму «справка» в julia, а затем спросить, что ?
это такое. Из его документации:
a ? b : c
Краткая форма для условных выражений; прочитайте «если a, вычислите b, иначе вычислите c». Также известен как тернарный оператор.
Этот синтаксис эквивалентен
if a; b else c end
, но часто используется, чтобы подчеркнуть значениеb
-или-c
которое используется как часть большего выражения, а не побочные эффекты, которыеb
c
может иметь вычисление или.Подробнее см. Раздел руководства по потоку управления.
Примеры
julia> x = 1; y = 2; julia> println(x > y ? "x is larger" : "y is larger") y is larger
не уверен в значении
->
Это просто для создания анонимной функции.
Я просто не понимаю значения
.>
Это просто поэлементный оператор «больше, чем» >
. Более подробную информацию см. В документации по пунктирным операторам.
Комментарии:
1. Спасибо. Как мы должны упростить это:
K = [( i >= j ? dot(view(X,:,i), view(X,:,j)) : 0.0 )::Float64 for i=1:n, j=1:n]
? как мы можем написать эту строку на python? еслиidi=collect(1:10)
, то в чем смысл этого:map(10 -> idi(1, 10), collect(1:12))
? Не могли бы вы показать мне пример использованияfind()
andmap()
в версии python? Большое спасибо!2. Ну, я бы написал это как
K = LowerTriangular(x⋅y for x in eachcol(X), y in eachcol(X))
. Не уверен насчет python.3. Не уверен, что вы
map(10 -> idi(1, 10)
имеете в виду, поскольку10
слева не является переменной.4. И не уверен в python, нет, извините.