как понять несколько символов и синтаксисов в Julia?

#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() and map() в версии 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, нет, извините.