LINUX.ORG.RU

Про джулию, кстати

 жулия


0

1

Правильно ли я понял, что в джулии есть броадкаст, но нет ничего похожего на концепцию ранга из J.

Чтобы было понятно, что такое ранг, продемонстрирую на следующем примере.

  a =: 3 3 $ i. 9
  a
0 1 2
3 4 5
6 7 8

  (+/"1) a
3 12 21

  (+/"2) a
9 12 15

Когда +/ действует с рангом 1, он применяется к каждой строке матрицы отдельно, т.е. элементы в каждой строке складываются (0+1+2, 3+4+5, 6+7+8). Когда +/ действует с рангом 2, он применяется ко всей матрице, т.е. складываются уже вектора 0 1 2 + 3 4 5 + 6 7 8.

В джулии, как я понял, broadcast применяет функцию тупо ко всем скалярам. Это, я считаю, большая недоработка



Последнее исправление: deadplace (всего исправлений: 1)
Ответ на: комментарий от anonymous

а вдруг выявят нетолератное отношение к каждой собаке :)

pfg ★★★★★
()
Ответ на: комментарий от deadplace

Можешь переопределить стандартные операторы под нестандартные типы.

Можешь объявить нестандартный оператор. Правда, не на любой символ - зарезервированные символы можно посмотреть здесь: https://github.com/JuliaLang/julia/blob/master/src/julia-parser.scm

(⨹)(x::Int64, y::Int64) = x+y
print(5 ⨹ 6 )
11
yyk ★★★★★
()
Ответ на: комментарий от deadplace

На сколько я понял, broadcast для операторов ты тоже можешь переопределить, или задействовать инфиксные операции...

Но в любом случае тягаться по выразительности (читай - краткости) с j или k - так себе затея ))

yyk ★★★★★
()

мне нечего добавить по теме, но в глаза бросилось, что ты пишешь на j, как будто это k. чуть более идиоматично выглядит так (j не знаю, мимо проходил):

   ]a=:i.3 3
0 1 2
3 4 5
6 7 8
   +/"1 a
3 12 21
   +/"2 a
9 12 15
anonymous
()
Ответ на: комментарий от anonymous

можно так, хотя это и не совсем то (совсем не то):

(⊞)(a,d)=sum(a;dims=d)

a=[0 1 2; 3 4 5; 6 7 8]

println(a⊞1)
[9 12 15]

println(a⊞2)
[3; 12; 21]

В Джулии размерность указывается наоборот, ну и в случае «вертикального» суммирования выдаётся «столбец».

yyk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.