Julia: 転眮の新しい構文

䜜成日 2017幎03月15日  Â·  103コメント  Â·  ゜ヌス: JuliaLang/julia

.opは䞀般にopのベクトル化された圢匏であるため、 .'が'のベクトル化された圢匏ではなく転眮を意味するこずは非垞に混乱しおいたす随䌎、別名ctranspose 。 この問題は、転眮および/たたは随䌎の代替構文に぀いお説明するためのものです。

linear algebra parser

最も参考になるコメント

tr(A)を平均行列転眮にするこずに非垞に匷く反察したす-誰もがそれが行列トレヌスを意味するず考えるでしょうhttps //en.wikipedia.org/wiki/Trace_ linear_algebra

党おのコメント103件

アンドレアスは19344でAᵀ そしおおそらくAᎎ を詊したしたが、あたり評刀が良くありたせんでした。 同様に、 A^Tが転眮されるように、特別な指数タむプT およびおそらくH を䜿甚しお^を駄排萜にするこずもできたすが、それもかなり怪しげです。 ただちょっず/ちょっず数孊衚蚘のように芋える他の倚くの良いオプションがあるかどうかはわかりたせん。

t(A)が最高かもしれないず思いたすが、別の1文字の名前を「盗む」のは残念です。

私のコメントを他の問題から移動したすそれが䜕かを解決するずいうわけではありたせんが...

.'以倖のものを䜿甚する堎合は+1。

あたり明癜ではない⍉を䜿甚するAPLず*Xを䜿甚するPythonJuliaにずっお混乱するを陀いお、転眮のための特別な構文を持぀蚀語を芋぀けるこずができたせんでした。 いく぀かの蚀語はtranspose(X)を䜿甚したす; Rはt(X)を䜿甚したす。 それはきれいではありたせんが、 .'より悪くはありたせん。 少なくずも、 .'ず混同するこずで、 'を䜿甚する傟向が少なくなりたす。これらが非垞に異なる操䜜であるこずは明らかです。

Rosettaコヌドを参照しおください。 ずころで、ゞュリアの䟋は実際に共圹転眮を瀺しおいたす...

他のダニの1぀を䜿甚できたすか `たたは"

-100を随䌎䜜甚玠に倉曎したす。これは、Juliaコヌドを数孊を曞くのず同じくらい明確にする玠晎らしいもののひず぀であり、さらに共圹転眮は通垞、ずにかく必芁なものなので、構文を省略した方が理にかなっおいたす。

共圹転眮の優れた構文がある限り、通垞の転眮の接尟蟞挔算子はほずんど䞍芁のように思われるので、通垞の関数呌び出しにするだけで問題ないように思えたす。 transposeすでに機胜しおいたす。 ただそれを䜿うこずができたせんでしたか t(x) R-ismは、名前から実際に䜕をするのかが明確でないため、残念なこずに思いたす。

別の目盛りを䜿甚するず、ちょっず奇劙になりたす。たずえば、フォントによっおはA`がA'のように芋えたり、 A"がA''のように芋えすぎたりしたす。 。

20978で倉曎を加えるず、接尟蟞の転眮が実際には珟圚よりも䟿利になりたす。 たずえば、2぀のベクトルxずyがあり、それらにfペアごずに適甚する堎合は、たずえばf.(x, y.') ...を20978で実行できたす。 、これは任意のタむプの配列に適甚されたす。

正盎なずころ、私たちの最善の遞択肢は、それをそのたたにしおおくこずだず思いたす。 提案のどれも私には明らかな改善のようには思えたせん。 .'には、Matlabに粟通しおいるずいう利点がありたす。 .は、実際にはf.(x, y.')のような䟋のドット呌び出し構文ずある皋床䞀臎しおおり、転眮が「融合」するこずをある皋床正しく瀺唆しおいたす RowVectorのおかげで䞀時的なコピヌは生成されたせん

実際、それをさらに進めお、 f.(x, g.(y).')を融合操䜜にするこずもできたす。 ぀たり、 .'転眮を非再垰的なala20978に倉曎し、そのセマンティクスを拡匵しお、他のネストされたドット呌び出しずの融合を含めたす。 非融合バヌゞョンが必芁な堎合は、 transposeを呌び出したす。

私はその蚈画がずおも奜きです、@stevengj。

1぀のしわおそらく@.マクロはy'をy.' $に倉換したせんそれは間違っおいるため。 ただし、 y'をある皮の融合随䌎䜜甚玠に倉えるこずができたす。

䞻な問題は、 f.(x, g.(y).')に融合セマンティクスを持たせるためのクリヌンな方法を芋぀けるこずです。 1぀の可胜性は、それをf.(x, g.(y.'))に倉換し、したがっおbroadcast(x,y -> f(x, g(y)), x, y.')に倉換するこずです。

これが正しく機胜するためには、フォヌルバックtranspose(x) = xメ゜ッドを埩元する必芁がある堎合があるこずに泚意しおください。その堎合、転眮を再垰的に維持するこずもできたす。

転眮を再垰的にするかどうかの決定は、ドット構文の融合に参加させるかどうかず盎亀しおいるず思いたす。 それを非再垰的にするずいう遞択は、それによっお動機付けられおいたせん。

@StefanKarpinski 、フォヌルバックtranspose(x) = xを埩元するず、非再垰的に倉曎する動機のほずんどが倱われたす。

フォヌルバックが埩元されおも、転眮が非再垰的である堎合の問題は䜕ですか

@jebej 、再垰転眮は、線圢挔算子の数孊挔算ずしお䜿甚するず、より正確になりたす。 私の蚘憶が正しければ、非再垰的にする䞻な理由は、MethodErrorをスロヌするのではなく、 transpose(x) = xフォヌルバックを定矩する必芁がないためです。

しかし、フォヌルバックがあるこずはひどいこずではありたせんが、それでも再垰的ではありたせん。

2぀のコメントを远加したしょう私は以前の議論を調べたしたが、それらに気づいおいたせんでした-䜕かを省略した堎合は申し蚳ありたせん

  • permutedimsのドキュメントには、これは倚次元配列の転眮の䞀般化であるず曞かれおいたす。 transpose関数の䞀般化を瀺唆しおいるので、少し誀解を招きたすが、そうではありたせん。
  • ベクトルx=["a", "b"]の転眮をどのように行うこずになっおいたすか 実際y=x.'が機胜しお新しい倉数を䜜成したすが、 getindexは倱敗したす。 AFAIKを䜿甚するには、 reshape(x, 1, :)たたははるかに遅いhcat(x...)を䜿甚する必芁がありたすが、 Vectorに別の構文を䜿甚するのは䞍自然です permutedimsはここでは機胜したせん 。

文字列のベクトルを転眮するためのナヌスケヌスは䜕ですか

たずえば、次のシナリオを考えおみたしょう。

x = ["$(j+i)" for j in 1:3, i in 1:5]
y = ["$i" for i in 5:9]

そしお、 xの最埌の行の埌にyを远加したいず思いたす。 そしお、最も簡単な方法は、 vcatをyの転眮するこずです。

実際には、テキストデヌタをMatrix{String}に段階的に蚘録するずきに発生したす Vector{Vector{String}}を䜿甚できたすが、倚くの堎合、マトリックスの方が䟿利ですたたは、 Vector{Vector{String}}を倉換する方法に぀いおも質問がありたす。連続する芁玠を垂盎方向に連結するこずにより、 Matrix{String} 。

別の䜿甚䟋転眮は、デカルト積 f.(v, w.') で関数をブロヌドキャストするために、2぀のベクトルを互いに盎亀させる最も簡単な方法です。

デヌタポむント昚日、接尟蟞「broadcast-adjoint」挔算子ず、それが転眮のように動䜜する理由によっお混乱しおいるパヌティヌに遭遇したした。 䞀番

FWIW、私は.'構文を取り陀くべきだず匷く感じおいたす。 MatlabよりもJuliaに粟通しおいる人ずしお、私はそれがベクトル化された随䌎䜜甚玠を意味するず思っおいたしたが、そうでないずきは本圓に぀たずきたした。 JuliaはMatlabではないため、Matlabの芏則に拘束されるべきではありたせん。Juliaでドットが隣接する関数のベクトル化を意味する堎合、これは蚀語党䜓で䞀貫しおいる必芁があり、 .'ずいう1぀の恐ろしい䟋倖がランダムに発生するこずはありたせん。 'ずは無関係です。

transposeを特別な「目盛り」衚蚘なしで䜿甚するのは問題ないず思いたす。ほずんどの堎合、実数の行列で呌び出されるため、 'は、次の堎合ず同等になりたす。本圓にタむピングを節玄したい。 転眮の融合バヌゞョンを䜜成したい堎合、 .'が正しい構文であるずは本圓に思いたせん。

それは良い点です。 おそらく、随䌎䜜甚玠だけが超コンパクトな構文を必芁ずしたす。

これtransposeず呌び、$$ 1 .' $を廃止しおみたしょう。 将来的には、 .'をポむントごずの随䌎ずしお䜿甚するか、Matlabナヌザヌのトラップを回避するために氞続的に非掚奚のたたにするかを怜蚎できたす。

登録枈みのパッケヌゞを調べたずころ、600以䞊の.'の䜿甚法が芋぀かったので、それほど珍しいこずではないこずに泚意しおください。 そしお、ドット呌び出し/ broadcast 0.6でのみ非数倀デヌタを完党に凊理し始めたでは、非数倀配列随䌎があたり意味をなさないを怠惰に転眮したいずいう願望がおそらくはるかに䞀般的になるでしょう。コンパクトな構文の議論はやや匷化されおいたす。

次に、より倚くのコヌドが悪い䜿甚パタヌンに閉じ蟌められる前に、できるだけ早く.'を廃止するこずをお勧めしたす。

なぜ悪いのですか

問題は、 .'が、点線の挔算子ずしお意味しおいるように芋えるこずを意味しないこずです。

䞊で述べたように、 .はベクトル化を意味し、ベクトル化された随䌎䜜甚玠を意味するように芋えるずいう䞀般的なパタヌンに違反しおいるためです特にMatlabに粟通しおいない人にずっお。

@stevengjは良い点だず思いたす—これは単玔な非再垰的な転眮の欲求ず結び぀いおいたす。

人気がなかったこずは知っおいたすが、アンドレアスの19344をᵀで支持し始めおいたす。 この時点で、識別子ずしおの_all_䞊付き文字の䜿甚を廃止し、_any_末尟の䞊付き文字を接尟蟞挔算子ずしお解釈するこずをお勧めしたす。 これはたた、䞊付き文字の数字を䜿甚しお、 literal_pow呚蟺の䞍噚甚さの䞀郚を解決するためのパスを提䟛したす。 はい、倉数名などのχ²を倱うのは悲しいこずですが、メリットはデメリットを䞊回っおいるず思いたす。

この時点で、識別子ずしおの_all_䞊付き文字の䜿甚を廃止し、_any_末尟の䞊付き文字を接尟蟞挔算子ずしお解釈するこずをお勧めしたす。

コヌドをリッピングする
screenshot from 2017-11-09 22-08-25

この時点で、識別子ずしおのすべおの䞊付き文字の䜿甚を廃止するこずをお勧めしたす

Tだけで、将来的には他にもいく぀か必芁な堎合は、それが必芁になるずは思いたせん。

愚かな䞀貫性 

はい、転眮に.'を䜿甚するこずは少し䞀貫性がありたせんが、これたでに提案されたすべおの代替案はもっず悪いようです。 「 .'は転眮であり、ドット挔算子に関する通垞の芏則の䟋倖です」ず蚀うのは䞖界で最悪のこずではありたせん。 あなたはこれを孊び、次に進みたす。

.'がドットブロヌドキャストではないこずに関する朜圚的な混乱に圹立぀可胜性があるこずに泚意するこずの1぀は、プレフィックスブロヌドキャストがop.であり、むンフィックスが.opであるのに察し、それは埌眮挔算子であるずいうこずです。 したがっお、 .は、接尟蟞の堎合のブロヌドキャストを意味するものではないず蚀えたす。 接尟蟞.の他の䜿甚法はフィヌルドルックアップであり、 getfield(x, ')は意味をなさないため、他の意味ずは異なりたす。

ずはいえ、私は.' transpose(x)を奜みたす。

@stevengj䞊蚘の登録枈みパッケヌゞでの600以䞊の䜿甚の倚くおそらくほずんどは、読みやすさずコヌドを犠牲にするこずなく、$ .' 'に眮き換えるこずができるず思いたす。動䜜し続けたす。

おそらく人気はありたせんが、接尟蟞"ず`がただ存圚する可胜性がありたすか

の䜿甚。 䞊蚘の登録枈みパッケヌゞでは、読みやすさを犠牲にするこずなく'に眮き換えるこずができ、コヌドは匕き続き機胜したす。

23424が到達するず、文字列の配列などでtransposeを䜿甚できるようになりたすが、 adjointは䜿甚できないこずに泚意しおください。 x.'の線圢代数䜿甚のベストプラクティスは、おそらくconj(x')のようなものになりたすうたくいけば、これは怠惰で、぀たり無料です。 コンパクトさのために.'を䜿甚するのが倧奜きですが、おそらくそれを取り陀くず、線圢代数ナヌザヌは正しいものを䜿甚し、デヌタ配列ナヌザヌはスペルアりトされたtransposeを䜿甚するようになりたす。

接尟蟞"ず`がただある可胜性がありたすか

transpose()の新しい構文は、かなり時期尚早のようです。 私芋では、必芁に応じおconj(x')ずtransposeに眮き換えるこずをお勧めしたすが、 .'を廃止するこずをお勧めしたす。

.'は、䞻に「すべおがマトリックスである」ずいうmatlabの䞻匵ず、さたざたな堎所にランダムな転眮を挿入する必芁があるような䞀貫したスラむスルヌルがないため、matlabで非垞に圹立぀ず感じおいたす。物事を機胜させる。

ここで議論を芁玄するず

  1. .'は、ドット付き挔算子ずしお唯䞀の傑出したものになりたした。これは、「ドットなしの挔算子を芁玠ごずに適甚する」ずいう意味ではありたせん。 Matlabから来おいない新しいナヌザヌは、これが驚くべき眠だず感じおいたす。

  2. .'は実質的にあいたいになりたした transposeを意味したしたか、それずもconj(x')を意味したしたか 原則ずしお、 .'のすべおのレガシヌ䜿甚法は、2次元配列のむンデックスを䞊べ替えおいるのか、それずも「非共圹随䌎」を行っおいるのかを刀断するために粟査する必芁がありたす。

最初の問題は問題がありたすが、それ自䜓は臎呜的ではありたせん。 2番目の問題は本圓に悪い問題です。これはもはや単䞀の䞀貫した操䜜ではなく、2぀の別々の意味に分割されたす。

.'を「芁玠ごずの随䌎」を意味するように倉曎した堎合、 conj(x')はx'.'ずほが同等になり、 conj(x)'はほがx.''になりたす。 x.'に非垞に近いです😬。

おそらく人気はありたせんが、それでも接尟蟞「」ず「」が存圚する可胜性がありたす。

貌り付けたコヌドをSlackにコピヌしお、構文の匷調衚瀺を砎棄するこずを確認するず...

ディスパッチメカニズムやその他の短く簡朔なナヌスケヌスを介しお「補品をクロス」するのが簡単になるため、䜕でも転眮できるのは玠晎らしいこずです。 この皮のものの簡単なフォヌルバックがない堎合の問題は、垞に、これを䜜成するためにtranspose(x) = xフォヌルバックたたはBaseタむプ、぀たりパッケヌゞ内のタむプ著䜜暩䟵害を定矩するこずです。ある皮のものは簡単に動䜜したす。 それは私に考えさせたすなぜComplexは奇劙なものではないのですか ほずんどの数の随䌎䜜甚玠はそれ自䜓であるため、耇雑な随䌎䜜甚玠が専門になりたす。それを数を超えお拡匵するこずはできたせんか

ここに2぀の非垞に関連するものがありたす。

1 x'は数倀以倖のタむプでは機胜しないため、他のデヌタでもこれを簡単に実行できる方法が必芁です。
2 transpose(x)はx.'ほど単玔ではありたせん。 耇雑な行列を転眮するナヌスケヌスははるかにたれであるため、これは䞻に1の堎合に圓おはたりたす。

しかし、2を䞋げる代わりに、1を適切に修正しおみたせんか

たぶん、合理的な修正は、 'を随䌎ではなく転眮を意味するマクロにするだけですか

しかし、2を䞋げる代わりに、1を適切に修正しおみたせんか

私たちはすでにその道を進んでおり、いく぀かはそれに隣接しおいたす。 おそらく他の誰かが蒞留するこずができる結果ずしお倧量の議論がありたしたが、芁玄するず、それはうたくいきたせん。 基本的に、数孊的なadjoint挔算は、数倀ではないものには意味がありたせん。 簡朔な構文が奜きであるずいう理由だけで非数倀に'を䜿甚するこずは悪いこずです。これは最悪の皮類の挔算子のしゃれであり、この皮の意味の乱甚から悪いこずが起こるこずは驚くべきこずではありたせん。 adjoint関数は、随䌎䜜甚玠を取るこずが理にかなっおいるものにのみ定矩する必芁があり、 'はそれを意味するためにのみ䜿甚する必芁がありたす。

珟圚䜿甚されおいる.'は、基本的に2぀の異なる操䜜であるこずに泚意しおください。配列転眮ず非共圹随䌎です。 再垰転眮問題は、これらが異なる操䜜であり、したがっおそれらを衚珟するための異なる方法が必芁であるずいう事実を浮き圫りにしたす。 マシヌの人々は、非共圹随䌎䜜甚がa重芁であり、b単玔な次元の亀換ずは異なるこずを断固ずしお䞻匵しおいるようです。 特に、正確には、非共圹随䌎䜜甚玠は再垰的である必芁がありたす。 䞀方、ゞェネリック配列の次元の亀換は明らかに再垰的であっおはなりたせん。 したがっお、これらの操䜜は別の方法で蚘述する必芁があり、 .'の既存の䜿甚法は、いずれかの意味を持぀ものずしお明確にする必芁がありたす。 .'の廃止は、これを匷制する方法です。

最埌に、 permutedims(x, (2, 1))は2次元配列の次元を亀換するには明らかに䞍䟿だず匷く感じおいたすが、 transpose(x)は䞍䟿すぎお玍埗がいかないずいう議論を芋぀けたした。 この操䜜は非垞に䞀般的であるため、単玔で明確な関数名を付けるのは倚すぎたすか 本圓に 配列の次元を亀換するこずは、関数名ず関数呌び出し構文を䜿甚する蚀語の他のすべおのものよりもはるかに䞀般的たたは重芁ですか v'v 、 v*v' 、 v'A*vのようなものを曞きたいので、ハりスホルダヌ衚蚘はadjointを非垞に特別なものにしたす。 そのため、 adjointは非垞に優れた構文になりたす。 しかし、配列の次元を亀換したすか 私の意芋では、それはオペレヌタヌを保蚌するものではありたせん。

匷力な議論ではありたせんが、たずえば、画面に同時にいく぀かのベクトルのコンテンツを衚瀺したい堎合など、よりコンパクトな配列を印刷するために'挔算子を䜿甚するこずがよくありたす単玔なコンテナヌずしお䜿甚する堎合芁玠を転眮できないため、倱敗するず必ずむラむラしたす。 したがっお、REPLの短い構文は間違いなく䟿利です。 たた、これにより、特に2次元配列を䜿甚しおアルゎリズムをjuliaに移怍する堎合に、行を優先する配列に慣れおいる人々が「順序を切り替える」簡単な方法を簡単に利甚できるようになりたすが、確かに匷力な議論ではありたせん。 これは、線圢代数䞻矩者だけに圹立぀わけではない、簡朔で優れた構文であるず蚀えたす。

https://github.com/JuliaLang/julia/pull/19344#issuecomment -261621763でいく぀かの構文のアむデアにコメントしたしたが、基本的には次のずおりです。

julia> const ᵀ, ᎎ = transpose, ctranspose;

julia> for op in (ᵀ, ᎎ)
           <strong i="7">@eval</strong> Base.:*(x::AbstractArray{T}, f::typeof($op)) where {T<:Number} = f(x)
       end

julia> A = rand(2, 2)
2×2 Array{Float64,2}:
 0.919332  0.651938
 0.387085  0.16784

julia>  Aᵀ = (A)ᵀ    # variable definition and function application are both available!
2×2 Array{Float64,2}:
 0.919332  0.387085
 0.651938  0.16784

julia> Aᎎ = (A)ᎎ
2×2 Array{Float64,2}:
 0.919332  0.387085
 0.651938  0.16784

しかし、もちろんハックがなければ、ある皮の「埌眮関数適甚」があり、括匧(x)fが必芁であるずいう考えだけで、点線のバヌゞョンは次のようになりたす(x).f  xf fが䞊付き蚘号であっおも、 xfは識別子になりたす。

このハックの䟋は、以前は0.6で機胜しおいたしたが、珟圚は次のようになっおいたす。

julia> Aᵀ = (A)ᵀ               
ERROR: syntax: invalid operator

julia> Aᵀ = (A)transpose       
2×2 Array{Float64,2}:          
 0.995848  0.549117            
 0.69401   0.908227            

julia> Aᎎ = (A)ᎎ               
ERROR: syntax: invalid operator

julia> Aᎎ = (A)ctranspose      # or adjoint or whatever
2×2 Array{Float64,2}:          
 0.995848  0.549117            
 0.69401   0.908227            

悲しいこずに、私はもずもず暩力のためにそれをやりたかったのです。

julia> square(n) = n^2; cube(n) = n^3;

julia> Base.:*(n, f::typeof(square)) = f(n)

julia> Base.:*(n, f::typeof(cube)) = f(n)

julia> const ² = square    # why?
syntax: invalid character "²"

julia> const ³ = cube    # why?
syntax: invalid character "³"

n² = (n)²やn³ = (n)³のような構文が可胜になるず私は玠朎に思っおいたしたが、どんな皮類の数倀識別子も最初の䜍眮に眮くこずは犁止されおいたすが、 (A)⁻¹も機胜したした。 ⁻¹はconst ⁻¹ = invた。

InfixFunctions.jlにも同様のハックを実装したした。

ナヌザヌずしお、私はPostfixFunctions.jlパッケヌゞを実行するだけで、ここで最高のものを芋぀けお満足するこずができたした。 しかし、珟圚、この構文䞊の制限は次のずおりです。

  • 識別子の先頭に数倀の䞊付き文字を䜿甚するこずは蚱可されおいたせん
  • 接尟蟞のスヌパヌむンデックスx * ᶠ ハックでの暗黙の乗算 (x)ᶠは蚱可されおいたせん

私には少し倚すぎるようですが、少なくずも数倀の䞊付き文字で始たる識別子を定矩できるようにしたいのですが、より䞀般的には、数倀のセマンティクスで0〜9の実際の数倀のみを無効にしたす。識別子、それは玠晎らしいでしょう。 😄

也杯

識別子ずしおの他の数字の説明に぀いおは、10762を参照しおください。

もう1぀の問題は、22089、挔算子のサフィックスに関連しおいたす。 +ᵀは有効な挔算子になりたした。これは、挔算子が期埅されるコンテキストで文字を組み合わせただけで構成される識別子をおそらく偶然に蚱可したせんでした。 それは私にはバグのようです。 ᵀが有効な識別子であるのに、 -ᵀが-(ᵀ)を実行しないのも少し奇劙です。 しかし、それは䞖界の終わりではなく、IMOがそれを修正するこずは、 ᵀの他の可胜な䜿甚法を倱う䟡倀がないでしょう。

.'を接尟蟞の転眮挔算子ずしお䜿甚するこずは、ここの衚にもありたせん問題の䞻題が䜕を蚀っおいるかにかかわらず、実際には、 .'を接尟蟞挔算子ずしお保持する必芁があるかどうかが考慮されたす。非共圹随䌎の堎合、これは再垰的です。 これは、移調ず同じであるこずがよくありたすが、䞀般的に同じ操䜜ではありたせん。 線圢代数の人々が.'に䞀般的な配列の転眮を意味させるこずをいずわないのであれば、それは別の話ですが、私の印象は受け入れられないずいうこずです。

@ Ismael-VC、䞊付き文字の接尟蟞関数構文ずしお(x)ᵀを蚱可しおいるこずがわかりたす。他に䜕を意味するのでしょうか あなたの提案が人々を間違った方法で揉み始めたのは、接尟蟞構文の関数ずしお任意の識別子を適甚できるようにするこずだず思いたす。 䞊付き文字に限定したす。

@StefanKarpinski 、コンセンサスは、 .'が非再垰的、非共圹配列転眮を意味するこずを正確に蚱可するこずであるず思いたしたこの挔算子がある堎合が、 'は再垰的で共圹です随䌎䜜甚。

接尟蟞の転眮挔算子にᵀを䜿甚するずいうアむデアは本圓に嫌いです。 aᵀaやLᵀDL = ltdlfact(A)のように、倉数名に䞊付き文字を付けるのは非垞に䟿利です。 挔算子にᵀのみを䜿甚し、IDで他の䞊付き文字が有効であるずいう事実に加えお、奇劙なこずになりたす。

それは私の理解ではありたせんでした– linalgの人々は、 a.'をそのたた、぀たりconj(a)'を維持するこずに賛成だず思いたした。 .'維持したすが、その意味を配列転眮に倉曎するこずはたったく異なりたす–それに぀いおどう思うかわかりたせん。 接尟蟞挔算子ずしおᵀしかないこずは、煩わしく䞀貫性がないこずに同意したす。 私は@Ismael-VCの(a)ᵀ提案が奜きですが、名前ずしおaᵀを䜿甚するこずを劚げるこずはありたせん。

それらの議論の私の蚘憶はスティヌブンのそれを反映しおいたす。 再垰的な非共圹転眮はたれであり、䞀般的にかなり奇劙です。 ここにたずもな芁玄 https //github.com/JuliaLang/julia/issues/20978#issuecomment-316141984。

接尟蟞'は随䌎であり、そのたたにしおおくべきだずいうこずに私たちは皆同意しおいるず思いたす。
接尟蟞.'が最適ではない構文であるこずに私たちは皆同意するず思いたす。
非再垰的構造的転眮が再垰的転眮よりも有甚であるこずに最も同意するず思いたす。

さお、誰もが同意しおいるように芋える点

  1. $ adjoint(a) $にはa'を䜿甚したす
  2. 非随䌎䜜甚玠にはconj(a)'たたはconj(a')を䜿甚したす。

したがっお、唯䞀の論点は、配列転眮の蚘述方法です。

  • a.'たたは
  • transpose(a)たたは
  • (a)ᵀずしお。

この評䟡は正しいですか

はい、そう思いたす「配列転眮」が非再垰的である堎合。

たた、私が理解しおいるように、 transpose(a)は間違いなく有効な構文および非再垰的である必芁があるこずに誰もが同意したす。䞍䞀臎の唯䞀のポむントは、 .'および/たたは(a)ᵀかどうかです。

https://github.com/JuliaLang/julia/issues/20978#issuecomment -315902532からのアプロヌチ1。これはかなりのサポヌトを受けたした䟋https//github.com/JuliaLang/julia/issues/20978# issuecomment-316080448、可胜性は残っおいたす。 投皿できるそのアプロヌチ flip(A)の玹介を実珟するブランチがありたす。

その䟡倀に぀いおは、 .'の廃止をサポヌトしたす。 このスレッドの混乱ずあいたいさは、それ自䜓がそうするこずを匷く䞻匵しおいたす。 䞀番

接尟蟞'がある限り、人々はそれを䜿甚しお、 f.(v, w')のベクトルのデカルト積でfをブロヌドキャストしたいず思うでしょう。 そしお、人々はそれを䜿甚しお、文字列のベクトルをテヌブルのような構造のヘッダヌの行ベクトルに再圢成したいず思うでしょう。 ですから、私たちが指瀺できるシンプルで䜿いやすい代替品を手に入れるこずは私にずっお魅力的です。

怜蚎しおいないオプションは次のずおりです。 A*' —新しいバむグラフ。 兞型的な数孊衚蚘はこれをconj(A)'ずしお解釈するかもしれたせんが、これは実際には私たちが望むものにかなり近いものです。 0.6で利甚可胜でしたが、0.7では、 *を䜿甚しお文字を連結できたす ただし、匕き続き機胜したす。

行末を超えお解析するカスタム文字列リテラルのため、接尟蟞"ず`が䜿甚できるずは思いたせん。 同じ理由で、Postfix *自䜓も䜿甚できたせん。 接尟蟞の玠数A′は、おそらく最も䞀般的に䜿甚されるUnicode識別子の1぀であるため、 Aᵀよりもさらに倚くなりたす。

正盎なずころ、私のコヌドを芋た埌、私は.'をたったく䜿甚しないので、 transpose(a)はおそらく問題ありたせん。

登録されたパッケヌゞをgrepしたずころ、600以䞊の䜿甚法が芋぀かったので、それほど珍しいこずではないこずに泚意しおください。

このスポットは、 ' $が問題ない堎所で$ .'が䜿甚されおいないかどうかを確認するためにたったくチェックされたしたか 私はそれが真実かもしれないず思い始めおいたす。 そうでなければ、 .'の合法的な䜿甚を芋た唯䞀の堎所は、Plots.jlラベルがベクトルを蚱可する前でした代わりに文字列の行ベクトルが必芁でしたが、それは倉曎されたした。 これが本圓に頻繁に必芁なコヌドの堎合、ロヌカルでT = transposeを実行するか、マクロをスロヌしお'をtransposeに倉曎するず思いたす。

<strong i="17">@transpose</strong> A = A'*A*B'*B*C'*C

そのたれなケヌスでは私には問題ないでしょう。

人々はそれを䜿甚しお、f。v、w'を䜿甚したベクトルのデカルト積でfをブロヌドキャストしたいず思うでしょう。 そしお、人々はそれを䜿甚しお、文字列のベクトルをテヌブルのような構造のヘッダヌの行ベクトルに再圢成したいず思うでしょう。 ですから、私たちが指瀺できるシンプルで䜿いやすい代替品を手に入れるこずは私にずっお魅力的です。

ステヌトメントに1回しか衚瀺されない堎合は、 transposeを䜿甚しおも倧䞈倫ではありたせんか

共圹随䌎䜜甚玠のa*'構文は非垞に優れおいたすが、より良い構文が必芁な操䜜ではないようです。 &aはたもなく利甚可胜になり、物事を亀換するこずを提案したすが、これは埓来の衚蚘法ずはかなり異なりたす。

倚分それはわらの䞖論調査の時間ですか

構造転眮をどのように綎る必芁がありたすか

おおたかに提案順に、絵文字名の刀断はここではありたせん

  • 👍 A.' —意味を倉曎し、構文を同じに保぀
  • 👎 transpose(A) —特別な構文はありたせん
  • 😄 t(A)たたはtr(A) —特別な構文はありたせんが、短い名前を゚クスポヌトしたす
  • 🎉 Aᵀ — ᵀず、識別子から特殊なケヌスに入れられた1぀たたは2぀の䞊付き文字
  • 😕 (A)ᵀ —すべおの䞊付き文字が識別子から分離されお接尟蟞挔算子のように動䜜したす
  • ❀ A*' —その䞍気味の谷の真䞊に光沢があり、構造的な転眮を意味したす
  • &Aをご垌望の堎合は、すぐ䞊のStefanの投皿に🎉を投げおください絵文字がなくなりたした

conj(x’)は比范的たれであるため、LinAlgの議論では、非再垰的な転眮䜿甚に.’を莈るこずに぀いお実際に話しおいたした。 ただしᵀは数孊的な構文であり、実際には数孊的な意味を持っおいる必芁がありたすある堎合。

tr(A)を平均行列転眮にするこずに非垞に匷く反察したす-誰もがそれが行列トレヌスを意味するず考えるでしょうhttps //en.wikipedia.org/wiki/Trace_ linear_algebra

䞊付き文字を識別子ずしお非掚奚にしない堎合おそらく1.0より前に真剣に怜蚎する必芁がありたす、 ᵀ(A)も可胜性がありたす。

提案(A)ᵀに関連しお、次の発蚀でこの議論をわずかに狂わせたこずをお詫びしたす。

単項挔算子ずしお√を䜿甚できるようにするこずは、これたであたり気にしたせんでした。特に、 √(...)を、 1぀たたは数文字。 さらに、私は垞にa²ず√aの機胜の違いが非垞に人工的であるこずを発芋したした。 Unicodeクラスなどに぀いお知っおいればおそらく理にかなっおいたすが、他の人にずっおはこれはばかげおいるように思われるに違いありたせん。 a²を有効な倉数名ずしお䜿甚するず䟿利ですが、同様に、 √aは、耇数の倉数を䜿甚する必芁がある堎合に、 aの平方根を栌玍するための䟿利な倉数名になりたす。回数。 たたは、 a²bずその平方根a√bのようなより耇雑な匏。前者は有効な識別子であり、埌者は有効な識別子ではありたせん。 ずりわけ、私は䞀貫性が奜きです。

したがっお、䞀貫性を保぀ために、括匧(A)ᵀ 、 (a)²を䜿甚するずきに、Unicode単項挔算子√ およびその芪族を削陀するこずず組み合わせお、接尟蟞挔算子を䜿甚するずいう提案が奜きです。識別子で䜿甚するこずもできたす通垞の関数呌び出し√(a)ずしお匕き続きアクセスできたす。

私は@Juthoが蚀ったこずに100同意し、䜕床もそれを考えおきたした。 @Juthoさん、問題を開いおいただけたせんか 提案識別子名に√を蚱可し、opずしお呌び出すには√(x)が必芁です。

次の質問-> 2 |> √どうですか

別のスレッドで√に぀いお説明したしょう。ただし、簡単に蚀うず、 2 |> √は√(2) $を意味したす。

パヌサヌの倉曎を必芁ずせず、入力が簡単な別の代替方法は、転眮甚のA^Tです Tを^メ゜ッドを䜿甚するシングルトンタむプずしお定矩するこずにより。  ああ、 @mbaumanもこのアむデアを持っおいたようです。 少し醜いですが、 A.'以䞋です。

私には専門知識はありたせんが、䜜業の過皋で行列匏を含む数千行を入力する可胜性が高いため、このディスカッションの結果に非垞に投資しおいたす。

transpose(A) # with no special syntaxは䞊蚘の投祚に勝っおいたすが、私の目ず指には苊痛がありたす。

Pythonでの䞀般的な䜿甚法は、おそらくnumpyず、次のように芋えおそれほど悪くないものがたくさんあるこずです。

import numpy as np
# define matrix X of n columns, with m rows of observations
error = X.dot(Theta.T) - Y
gradient = (1 / m) * (X.dot(Theta.T) - Y).T.dot(X)

私はする必芁はありたせん

grad = 1/m * transpose(X * transpose(Theta) - Y)) * X

これは、転眮の粟神的な抂念を、数孊衚蚘法が定着した慣習から完党に倉曎したす。これは、接尟蟞の蚘号衚珟であり、通垞はAᵀたたはAᵗです。

個人的には、随䌎䜜甚玠が䜿甚される前のJuliav.0.6で機胜するA'に非垞に満足しおいたす。 随䌎䜜甚玠は非垞に頻繁に䜿甚されたすか

これが私のコメントです。

Aᵀ or Aᵗ    if the world won't accept unicode operators, let them use transpose(A)
A'          close to math notation, easy to type and *especially* easy to read
A^'         this could signal `^` not to be parsed as Exponentiation.
A.'         conflicts with dotted operator syntax, but at face value OK
A^T or A^t  these are pretty good, but what if variable `T` is meant to be an exponent? 
A.T         same as numpy, same dotted operator collision
t(A)        nesting reverses semantics, 3 keystrokes and two of them with shift key.
transpose(A) with no special syntax     # please don't do this.

個人的には、随䌎䜜甚玠に取り蟌たれる前のJuliav.0.6で機胜するA'に非垞に満足しおいたす。 随䌎䜜甚玠は非垞に頻繁に䜿甚されたすか

わかりたせんが、 A'は垞にAの随䌎䜜甚玠でした。 以前は、共圹転眮の基瀎ずなる関数ctransposeを呌び出しおいたしたが、機胜を倉曎せずに、同等の甚語adjointに名前を倉曎したした。

線圢代数を実行しおいる堎合は、ずにかく共圹転眮が必芁になる可胜性が高いため、 transpose(A) A'ず入力したす。 非共圹転眮の特別な構文を定矩しないこずの人気は、おそらくほずんどの線圢代数の䜿甚で非共圹転眮が必芁になるこずは実際にはそれほど䞀般的ではないずいう事実によるものです。

線圢代数を実行しおいる堎合は...

ツヌルがハンマヌの堎合...:)

...ゞュリアが䞀般的なプログラミング蚀語に成長する可胜性に぀いお考える必芁がありたす。

倚分そうではないかもしれたせん、倚分それは線圢代数のアヌゎットのたたであるでしょう-それは私のようなプログラマヌに぀いお考えなければならない可胜性です。 :)

@mahiki 、あなたはNumPyの䟋です

import numpy as np
# define matrix X of n columns, with m rows of observations
error = X.dot(Theta.T) - Y
gradient = (1 / m) * (X.dot(Theta.T) - Y).T.dot(X)

ゞュリアでは文字通り次のように曞かれたす

error = X*Θ' - Y
gradient = (1/m) * (X*Θ' - Y)' * X

たたは、ベクトルがそのNumPyの䟋では行であり、Juliaでは列であるず仮定したす。

error = X'Θ - Y
gradient = (1/m) * (X'Θ - Y) * X'

これは、それが埗るのず同じくらい明確で数孊的なようです。 デヌタが実際の堎合、随䌎ず転眮は同じ操䜜です。これが、䞊蚘の転眮を䜿甚しおいる理由かもしれたせんが、数孊的には随䌎が正しい操䜜です。 @ararslanが蚀ったように、 X'は、JuliaおよびMatlabでもでは垞にadjointを意味しおいたした。 以前は「共圹転眮」の略でctransposeず呌ばれおいたしたが、挔算子の定矩プロパティが次のようになっおいるため、この名前は誀った名前でした。

dot(A*x, y) == dot(x, A'y)

これぱルミヌト随䌎の定矩特性ですが、 Aが耇玠行列の堎合、共圹転眮によっお満たされたす。 そのため、「随䌎」はこの挔算子の正しい総称です。

ずはいえ、 a.'が構造的転眮を意味するのは問題ないず思うので、私はtranspose(a)ずa.'の䞡方に投祚したした。 これは期埅どおりに機胜したす。再垰的ではないため、䞀郚の汎甚コヌドでは「数孊的に正しく」ありたせんが、期埅どおりに機胜するこずで十分なようです。 そしお、ゞェネリックコヌドでconj(a')を䜿甚するこずを怜蚎するように人々に指瀺するこずは、私たちが本圓に人々を頭から殎る必芁があるものではなく、教育的なこずのように思えたす。

@mahiki䜕らかの理由で、コヌドでadjoint transpose $を䜕床も䜿甚する必芁がある堎合は、$の゚むリアスであるtranspose @tのような短いマクロを定矩できたす。 transpose 特に、他の人ずコヌドを曞いおいる堎合は、この゜リュヌションが理想的ではないこずはわかっおいたすが。

Juliaが䞀般的なプログラミング蚀語に成長する可胜性に぀いお考える必芁がありたす。

@Liso77もうです。 倚くの䟋の1぀ずしお、NanosoldierはGitHubむベントをリッスンし、オンデマンドでパフォヌマンスベンチマヌクを実行するWebサヌバヌをすべおJuliaで実行したす。 それは䜙談ですが、私はこのスレッドが話題から倖れるこずを望んでいたせん。

ある皮の行列を数倀以倖のデヌタで転眮する堎合これは完党に有効なナヌスケヌスです、数孊的な転眮衚蚘は実際には駄排萜のように芋えたす。 その堎合は、たずえばtranspose たたは特定のニヌズによっおはpermutedims など、䜕を求めおいるのかをより明確にする方がよいず思いたす。

ある皮の行列を数倀以倖のデヌタで転眮する堎合これは完党に有効なナヌスケヌスです、数孊的な転眮衚蚘は実際には駄排萜のように芋えたす。

A.'は、通垞の意味では実際には「数孊的な転眮衚蚘」ではないため、これが賛成たたは反察の議論であるずは思いたせん。

@ararslanは、既存の.'に反察しおいるのではなく、䞊付き文字-T構文の導入に反察しおいるず思いたす。 私は同意する傟向がありたす-随䌎の線圢代数の抂念を意味する堎合は、 'を䜿甚する必芁がありたす行列が実際に存圚する堎合でも。 たた、数倀以倖のデヌタの行列がある堎合は、2぀のむンデックスを䞊べ替えるこずはもちろん完党に正圓ですが、この操䜜は、通垞考えられおいるように実際には「転眮」ではなく、数孊的な䞊付き文字を䜿甚したす-T衚蚘はおそらく、明確にするよりも混乱する可胜性が高いでしょう。 䞊付き文字-T衚蚘が実際に適切である唯䞀の状況は、むンデックスを䞊べ替えたい数倀行列があるが、随䌎線圢挔算子は実際には必芁ない堎合です。 このような状況は確かに存圚したすが、新しい構文を導入するこずを正圓化するにはたれすぎる可胜性がありたす。

参照。 https://github.com/JuliaLang/julia/issues/20978#issuecomment-315902532 。 䞀番

...しかし、この操䜜は、私たちが通垞考えるように、実際には「転眮」ではありたせん...

これが非垞に珍しい堎合、なぜararslanや他の倚くの人がtranspose(A)ずしお構造転眮のスペルに投祚するのですか

ありがずう@StefanKarpinski @ ararslan@ ttparker。 線圢代数のテキストに戻っお、随䌎䜜甚玠を再発芋する必芁がありたした。 私は耇玠解析の前にそれを取りたした、おそらく私がそれに気づかなかった理由。

私はこれができるのが倧奜きです
gradient = (1/m) * (X'Θ - Y) * X'

私の混乱は、参照ドキュメント、論文、教科曞などでの「転眮」䞊付き文字Tずしおの広範な䜿甚に起因したす。たずえば、 Andrew NgのスタンフォヌドCS229講矩ノヌトでは、察応するJuliaコヌドはadjointを次のように䜿甚したす。䞊蚘の@StefanKarpinskiのすっきりずした䟋で。 これは、随䌎ず転眮がℝ 右で同等であるためです。 曎新うん

転眮の私の奜みの衚蚘法は、論理的に䞀貫しおいるものです。 明らか.'は点線の挔算子構文ずの競合によるものではなく、Unicodeの䞊付き文字を陀いお、適切な特別な構文が利甚できないように芋えるため、特別な構文がないtranspose(A)に異議はありたせん。

transpose @tの転眮をたくさん曞いおいるこずに気付いた堎合は、 @ttparker゜リュヌションが奜きです。

繰り返したすが、私は次のように誀解したした。

transpose(A) with no special syntax # please don't do this.

倧孊院レベルの数孊の貧匱な斜蚭にもかかわらず、私のコメントを真剣に受け止めおくれおありがずう。

談話から。

'をf'を'(f)にマップする修正埌の挔算子にしたいのですが、 Base.:'(x::AbstractMatrix) = adjoint(x)で、ナヌザヌは他のメ゜ッドを自由に远加できたす。随䌎ずは䜕の関係もありたせん。 たずえば、 f'がdf / dtを参照するこずを奜む人もいたす。

0.7で導入された挔算子の接尟蟞を䜿甚するず、 f'ᵃが'ᵃ(f)などにマップされ、ナヌザヌが独自の接尟蟞挔算子を定矩できるようになりたす。 これにより、 Base.:'ᵀ(x::AbstractMatrix) = transpose(x)やBase.:'⁻¹(x::Union{AbstractMatrix,Number}) = inv(x)などを䜿甚できるようになりたす。

A'ᵀを曞くこずは、おそらくAᵀほどきれいではありたせんが、 ᵀで終わる倉数名を廃止する必芁はありたせん。

䞀芋、それは非砎壊的な機胜である可胜性があるように芋えたす。 それは非垞に賢い劥協です。 それはいいですね。

私には合理的なようです。 最も難しい郚分は、 '関数の名前を考え出すこずです。この堎合、プレフィックス構文は機胜したせん。

最も難しい郚分は、'関数の名前を考え出すこずです

apostrophe  文字通りすぎるかもしれたせん...

プレフィックス構文を機胜させるこずは可胜ですかたずえば、明瀺的な(')(A)構文を䜿甚したすか そうでない堎合は、 https//github.com/JuliaLangによっお導入されたif-you-can-define-the-symbol-name-then-you-can-override-its-syntaxルヌルに違反するため、これは問題です。

線集利甚可胜に芋えたす

julia> (')(A)


ERROR: syntax: incomplete: invalid character literal

julia> (')(A) = 2


ERROR: syntax: incomplete: invalid character literal

残念ながら、 'は、非垞に高い優先順䜍識別子自䜓の優先順䜍ず同じを持぀別の皮類のアトム文字を導入するため、識別子名ずしお䜿甚するのが最も難しい文字の1぀です。 たずえば、 (')'はそれ自䜓に'を適甚するのですか、それずもオヌプンパレンの埌に')'リテラルが続くのですか

短期的には実甚的ではないオプションの1぀は、文字リテラルを'の䟡倀がないず宣蚀し、代わりにc"_"のような文字列マクロを䜿甚するこずです。

$$ 0 $$の前にドットコロンが付いおいる堎合に、 'が識別子ずしお解析され、 Base.:'が機胜する堎合はどうでしょうか。

もちろん(@__MODULE__).:'(x) = function_bodyを曞くのは少し面倒かもしれたせんが、 (x)' = function_bodyは同じように機胜するはずです。 線集いいえ、 (x)'はBaseの'の呌び出しにマップする必芁があるためです。 珟圚のモゞュヌルで'関数を定矩するのは面倒ですが、それを行う理由もありたせん。

たたは、 ''を識別子'ずしお解析させるのはどうでしょうか。そうでなければ、空の文字リテラルずしお解析されたすこれは珟圚解析レベルの゚ラヌです。 同様に、 ''ᵃは識別子'ᵃなどずしお解析されたす。

珟圚構文゚ラヌではないものはすべお以前ず同じように解析されたすたずえば、 2''は埌眮'が2に2回適甚されたすが、 2*''は今では'の2回ずしお解析したす。

a'' === aが''(a) === a'になるのは、玛らわしいようです。 代わりにBase.apostropheを名前ずしお䜿甚する方が良いようですたたはそのようなもの。

行列の転眮に盎接関係しない'構文に関するものなので、この議論を新しいGithubの問題に分割する方がよいでしょうか。

問題を分割する自動化された方法はありたすか、それずも単に新しいものを開いおここのディスカッションにリンクする必芁がありたすか

埌者

䞊付き文字-T衚蚘が実際に適切である唯䞀の状況は、むンデックスを䞊べ替えたい数倀行列があるが、随䌎線圢挔算子は実際には必芁ない堎合です。 このような状況は確かに存圚したすが、新しい構文を導入するこずを正圓化するにはたれすぎる可胜性がありたす。

議論するには遅すぎるず思いたすが、蚀及する䟡倀があるず思う1぀の䜿甚法を指摘したいず思いたす。耇雑なステップの埮分を内郚にtransposeを持぀実数倀関数に適甚するこずです。それ。 私は、この特定の理由から、MATLABずjuliaで.'が必芁であるず個人的に考えたした。

transposeが耇数回発生する䟋を瀺したすこの方法でそれを回避できる可胜性がありたすか

using LinearAlgebra

# f : Rⁿ → R
#     x  ↩ f(x) = xᵀ * x / 2
f(x) = 0.5 * transpose(x) * x

# Fréchet derivative of f
# Df : Rⁿ → L(Rⁿ, R)
#      x  ↩ Df(x) : Rⁿ → R (linear, so expressed via multiplication)
#                   h  ↩ Df(x)(h) = Df(x) * h
Df(x) = transpose(x) 

# Complex-step method version of Df
function CSDf(x) 
    out = zeros(eltype(x), 1, length(x))
        for i = 1:length(x)
        x2 = copy(x) .+ 0im
        h = x[i] * 1e-50
        x2[i] += im * h
        out[i] = imag(f(x2)) / h
    end
    return out
end

# 2nd Fréchet derivative
# D2f : Rⁿ → L(Rⁿ ⊗ Rⁿ, R)
#       x  ↩ D2f(x) : Rⁿ ⊗ Rⁿ → R (linear, so expressed via multiplication)
#                     h₁ ⊗ h₂ ↩ D2f(x)(h₁ ⊗ h₂) = h₁ᵀ * D2f(x) * h₂
D2f(x) = Matrix{eltype(x)}(I, length(x), length(x))

# Complex-step method version of D2f
function CSD2f(x)
    out = zeros(eltype(x), length(x), length(x))
    for i = 1:length(x)
        x2 = copy(x) .+ 0im
        h = x[i] * 1e-50
        x2[i] += im * h
        out[i, :] .= transpose(imag(Df(x2)) / h)
    end
    return out
end 

# Test on random vector x of size n
n = 5
x = rand(n)
Df(x) ≈ CSDf(x)
D2f(x) ≈ CSD2f(x)

# test that the 1st derivative is correct Fréchet derivative
xϵ = √eps(norm(x))
for i = 1:10
    h = xϵ * randn(n) # random small y
    println(norm(f(x + h) - f(x) - Df(x) * h) / norm(h)) # Fréchet check
end

# test that the 2nd derivative is correct 2nd Fréchet derivative
for i = 1:10
    h₁ = randn(n) # random h₁
    h₂ = xϵ * randn(n) # random small h₂
    println(norm(Df(x + h₂) * h₁ - Df(x) * h₁ - transpose(h₁) * D2f(x) * h₂) / norm(h₂)) # Fréchet check
end
# Because f is quadratic, we can even check that f is equal to its Taylor expansion
h = rand(n)
f(x + h) ≈ f(x) + Df(x) * h + 0.5 * transpose(h) * D2f(x) * h

重芁なのは、 fずDfはtransposeを䜿甚しお定矩する必芁があり、随䌎䜜甚玠を䜿甚しおはならないずいうこずです。

耇雑なステップの方法は、ゞュリアにはあたり関係がないず思いたす。 蚀語が効率的な組み蟌みの耇玠数をサポヌトしおいるが、同等に効率的なDualの数倀タむプを定矩できない堎合に、自動埮分を取埗するのは巧劙なハック/回避策ではありたせんか これは、非垞に優れた自動埮分ラむブラリを備えたゞュリアには圓おはたりたせん。

耇雑なステップの方法の代わりに二重数を䜿甚するこずに同意したす。これは非垞に良い点です私は個人的に、ゞュリアですべおの耇雑なステップの方法の評䟡を二重数の評䟡に眮き換えたした。 ただし、これは、デモンストレヌションの目的、トリックの指導たずえば、 Julia Con2018での耇雑なステップの方法に぀いお話しおいるNickHighamを参照、および移怍性぀たり、耇玠数を䜿甚した䞊蚘のMATLABのコヌドのバヌゞョンはよりクリヌンです。

実際の配列よりも耇雑な配列を䜿甚する゚ンゞニアやおそらく物理孊者の䞖界から来お、転眮挔算子がないのは少し面倒です。 調和時間䟝存性の耇雑なフェヌザ衚珟は、私たちの分野ではどこにでもありたす。私の唯䞀の考慮事項は簡朔さですが、私は個人的にxHずxTのnumpy構文を奜みたす。

私のコヌドでは、゚ルミヌト転眮に察する転眮挔算子の密床は玄1察1です。 したがっお、非共圹転眮も同様に重芁です。 転眮の倚くの甚途は、倖積を䜜成し、他のコヌドずのむンタヌフェヌスや行列の乗算のために配列のサむズを正しく蚭定するこずです。

今のずころ、操䜜にマクロたたは1文字の関数を提䟛するだけですが、叀い機胜であるtransposeたたはpermutedimsに盞圓するものは䜕ですか

transposeは線圢代数を察象ずしおおり、再垰的です。 permutedimsは、あらゆるタむプのデヌタを非再垰的に配眮するためのものです。

随䌎ず同じくらい転眮を䜿甚するず蚀うのは興味深いこずです。 以前は同じでしたが、䞻にデヌタが実際の堎所で間違いを犯しがちだったため、転眮する傟向がありたしたが、実際には随䌎䜜甚玠が正しい操䜜でした耇雑なケヌスに䞀般化されたした-随䌎䜜甚玠は私のアルゎリズムにずっお正しい操䜜でした。 もちろん、倚くの有効な䟋倖がありたす。

電気力孊に関連するすべおの堎合、空間のようなベクトルを䜿甚するこずが倚く、R ^ n通垞はn = 3でベクトル挔算を䜿甚したい堎合がありたす。぀たり、ベクトルが耇玠数倀であるため、特にtransposeです。フヌリ゚倉換を行いたした。 @mattcbroがこの皮のアプリケヌションに぀いお話しおいるようです。

そうは蚀っおも、構文の議論を読んでいるずき、私は個人的に、もう少し冗長な構文がプログラミングの速床や効率を遅くするものだずは想像できなかったずよく考えおいたす。 アルゎリズム自䜓ずそれを実装する最も自然で効率的な方法に぀いお考えるず、はるかに時間がかかりたす。

電気力孊に関連するすべおの堎合、空間のようなベクトルを䜿甚するこずが倚く、R ^ n通垞はn = 3でベクトル挔算を䜿甚したす。぀たり、フヌリ゚を䜿甚したためにベクトルが耇玠数倀であっおも、特に転眮したす。倉身。

必ずしも。 倚くの堎合、フヌリ゚振幅からの時間平均量が必芁です。この堎合、耇玠ドット積を䜿甚したす。たずえば、œℜ[𝐄*×𝐇]は耇玠フヌリ゚成分からの時間平均ポむンティングフラックスであり、Œε₀|𝐄|²は時間平均真空゚ネルギヌ密床。 䞀方、マクスりェル挔算子は通垞耇玠察称挔算子「逆数」であるため、フィヌルド𝐄𝐱などの無限次元代数に非共圹の「内積」を䜿甚するこずがよくありたす。すべおのスペヌス。

それは本圓です、私は最初の文にしばしばその単語を持っおいたした、しかしそれを明らかに削陀したした:-)。

そこに行きたいのであれば、電磁量は、しばしば幟䜕代数ず呌ばれるクリフォヌド代数の定匏化でさらに簡朔に曞かれおいたす。 これらの代数には、特に散乱問題を考慮する堎合に、理論の定匏化においお重芁な圹割を果たす耇数の自己同型ず反自己同型がありたす。

これらの代数は通垞、簡朔な行列衚珟を持ち、これらの射は、耇雑な転眮、゚ルミヌト転眮、および掻甚を介しお簡単に蚈算されるこずがよくありたす。

それでも、前に述べたように、転眮の䞻な甚途は、配列を他の配列や他のコヌドずむンタヌフェむスするように配眮し、行列の乗算をフラット化された配列の正しい次元に察しお機胜させるこずです。

私は個人的にxHずxTのnumpy構文を奜みたす

1.0で簡単に実装でき、効率的であるはずです。

function Base.getproperty(x::AbstractMatrix, name::Symbol)
    if name === :T
        return transpose(x) 
    #elseif name === :H # can also do this, though not sure why we'd want to overload with `'`
    #    return adjoint(x)
    else
        return getfield(x, name)
    end
end 

これは驚くほど簡単で、ちょっずすっきりしおいたす。 欠点は、 getpropertyの盎亀䜿甚が互いに構成されないこずです。 したがっお、特定のマトリックスタむプにgetpropertyを実装する人は、䞀般的な動䜜を手動で実装する必芁がありたす。

getpropertyの盎亀䜿甚は構成されたせん

うヌん。 それは、xTがgetproperty(x, Val(:T))に「䞋げられるべきだった」こずを意味するのだろうか。 しかし、それが貧匱なコンパむラに䜕をもたらすかを考えるず、私は震えたす。

誰もが自分の意芋を持っおいるず確信しおいたすが、私にずっおは、ドット構文から汎甚むンタヌフェむスを構築するのが難しいずいうのはほずんど機胜です。 誀解しないでください。これは本圓に玠晎らしい機胜であり、名前付きタプルのような構造䜓などを定矩するのに最適です。

 Valディスパッチレむダヌをタむプに非垞に簡単に远加するこずも可胜です。

@c42fのコヌドは魅力のように機胜したす。 残念ながら、バヌゞョン0.64以降で動䜜するコヌドを䜜成しようずしおいたす。これにより、転眮たたは独自に定矩した関数TA= transposeAのいずれかを䜿甚する必芁がありたす。 おそらく、マクロはもう少しクリヌンで少し効率的だったでしょう。

明確にするために、この特定のgetpropertyを定矩するこずがナヌザヌコヌドにずっお良い考えであるこずを瀺唆しおいるわけではありたせん。 長期的には問題が発生する可胜性がありたす;-)おそらくい぀の日か、 x.TをBaseで定矩できるずいう結果を十分に感じるこずができるでしょう。

しかし、䞀般的な意味で、ゞェネリックむンタヌフェむスで「ゲッタヌ」を定矩するためのこの皮のプロパティの䜿甚が実際に悪いのはなぜだろうか。 たずえば、䞀般的なフィヌルドゲッタヌ関数には珟圚、 getpropertyを適切に䜿甚するこずで簡単に解決できる、非垞に倧きな名前空間の問題がありたす。 MyModule.A(x) 、 get_my_A(x)のようなもっず長い醜い関数名を曞くよりも、 x.Aを曞く方がはるかに良いです、たたはナヌザヌから非垞に䞀般的な名前Aを゚クスポヌトするモゞュヌル。 私が芋おいる唯䞀の問題は、スヌパヌタむプで䞀般的に定矩されおいる.Aずは関係なく、サブタむプの.Bの意味をオヌバヌラむドする機胜が期埅されるこずです。 したがっお、 Valに぀いおの半分深刻なコメント。

面癜いアむデア

julia> x'̄
ERROR: syntax: invalid character "̄"

キャラクタヌはTのように芋えたすが、実際には'の䞊にバヌがありたす。 深刻かどうかわからない...

screen shot 2018-09-10 at 11 29 56

ええ、私にもGitHubでそのように芋えたす。 しかし、それはオヌバヌバヌです。 タヌミナルショヌにコピヌしお貌り付けたす。

screen shot 2018-09-10 at 10 31 24 am

賢すぎおかわいい。 ただし、私はただ結合文字が奜きで、 'ᵀはいいず思いたす。

-100を随䌎䜜甚玠に倉曎したす。これは、Juliaコヌドを数孊を曞くのず同じくらい明確にする玠晎らしいもののひず぀であり、さらに共圹転眮は通垞、ずにかく必芁なものなので、構文を省略した方が理にかなっおいたす。

このような発蚀には傲慢さがありたす。 開発者の䞀郚の有限の割合が明瀺的にadjoint()を望んでいないが、 transpose()を必芁ずしおいるこずを考慮しおください。

デフォルトの'挔算子をモデル化するためのシンボリック蚈算を䜿甚する堎合のケヌスずポむントは、たずえば、疑䌌逆行列(A'*A)\(A * bたたは2次圢匏v'*A*vが誀っお返される原因になりたす。長くお耇雑な結果を枛らすこずはできたせん。

おそらく解決策は、 'の意味を宣蚀するある皮のコンパむラ指什です。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡

関連する問題

sbromberger picture sbromberger  Â·  3コメント

wilburtownsend picture wilburtownsend  Â·  3コメント

tkoolen picture tkoolen  Â·  3コメント

StefanKarpinski picture StefanKarpinski  Â·  3コメント

yurivish picture yurivish  Â·  3コメント