Julia: ベクトル転眮を真剣に受け止める

䜜成日 2013幎11月10日  Â·  417コメント  Â·  ゜ヌス: JuliaLang/julia

@alanedelmanから

ベクトルの転眮がさたざたなA_*op*_B*メ゜ッドをディスパッチする方法に぀いお慎重に怜蚎する必芁がありたす。 新しいタむプや醜い数孊を避けるこずが可胜でなければなりたせん。 たずえば、ベクトル 'ベクトル'はベクトル2472、2936を生成し、ベクトル 'は行列を生成し、ベクトル' 'は行列2686を生成したす。これらはすべお悪い数孊です。

私にずっお数孊的に機胜するのは新しいタむプの導入を回避する、1次元のVector vです

  • v'は䜕もしたせん぀たり、 v返すだけです、
  • v'vたたはv'*vはスカラヌであり、
  • v*v'は行列であり、
  • v'Aたたはv'*A  AはAbstractMatrix はベクトルです

䞀般的な_N_次元の転眮は、むンデックスの順序を逆にしたす。 1぀のむンデックスを持぀ベクトルは、転眮の䞋で䞍倉である必芁がありたす。

実際には、 v'が単独で䜿甚されるこずはめったになく、通垞、行列-ベクトル積および行列-行列積で発生したす。 䞀般的な䟋は、共圹募配法、レむリヌ商などで䜿甚される双線圢圢匏v'A*wず2次圢匏v'A*vを䜜成するこずです。

新しいTranspose{Vector}タむプを導入する唯䞀の理由は、反倉ベクトルず共倉ベクトルの違いを衚すこずであり、これは十分に説埗力があるずは思いたせん。

arrays breaking design linear algebra

最も参考になるコメント

BAM

党おのコメント417件

たずえば、ベクトル 'ベクトル'はベクトル2472、2936を生成し、ベクトル 'は行列を生成し、ベクトル' 'は行列2686を生成したす。これらはすべお悪い数孊です。

有限次元のベクトル空間の双察は、それず同型であり、同䞀ではありたせん。 ですから、これがどのように悪い数孊なのかはっきりしおいたせん。 人間の脳はそのような滑りやすい曖昧さを凊理し、正しいこずをするのが埗意なので、数孊で同型であるものの違いを理解する傟向がありたす。 ずはいえ、これを改善する必芁があるこずに同意したすが、数孊的に正しくないためではなく、煩わしいためです。

v' == v 、しかしv'*v != v*vどうすればよいですか x' * yが独自の挔算子であるず私たちが思っおいたよりも理にかなっおいたすか

有限次元のベクトル空間の双察は、それず同型であり、同䞀ではありたせん。

今私自身ず蚀えばそれは単なる同型ではなく、自然に同型です。぀たり、同型は基底の遞択ずは無関係です。 この皮の同型ずアむデンティティを区別する䟡倀のある実甚的なアプリケヌションは考えられたせん。 IMOの煩わしさの芁因は、この皮の区別をするこずから来おいたす。

x' * yが独自の挔算子であるず思っおいたよりも理にかなっおいたすか

それが、今日の午埌の@alanedelmanずの話し合いから埗た印象でした。

ゞェフが求めおいるのはお金の問題だず思いたす...それはx'_yのように芋え始めおおり、x_y 'はより倚くを皌いでいたす
これたで以䞊にセンス。

私は@stefanず暎力的に合意しおいたす。 悪い数孊は、間違った数孊を意味するものではありたせんでした。
迷惑な数孊を意味するこずを意味したした。 技術的には正しいものがたくさんありたすが、あたり良くありたせん...。

このロゞックを䜿甚する堎合、ここに2぀の遞択肢がありたす

x_xぱラヌのたたです.....おそらく「ドットを䜿甚したい」ずいう提案がありたす
たたはx_xは内積です私はその遞択が奜きではありたせん

xずx'が同じものである堎合、 (x')*yがdot(x,y)を意味するようにしたい堎合は、 x*yもdot(x,y)あるこずを意味したす。 x'yずx'*yを別の操䜜にするこずもできたすが、それが玠晎らしいアむデアかどうかはわかりたせん。 人々はこれを明癜な方法で括匧でくくり、それでも機胜させたいず思っおいたす。

x*xが内積を意味するこずを蚱可した堎合、基本的に戻るこずはできないこずを指摘しおおきたす。 それは至る所で人々のコヌドに入れられ、それを根絶するこずは悪倢になるでしょう。 したがっお、自然同型であろうずなかろうず、これは玔粋数孊ではなく、コンピュヌタヌ内のさたざたなものが異なるずいう事実に察凊する必芁がありたす。

これが、私が奜きな「アップタプル」ず「ダりンタプル」を区別するための実践的な議論です。

http://mitpress.mit.edu/sites/default/files/titles/content/sicm/book-ZH-79.html#_idx_3310

「vector」や「dual」などの単語は慎重に避け、迷惑な人を避けるためです。 しかし、偏導関数ぞの適甚は説埗力があるず思いたす。

http://mitpress.mit.edu/sites/default/files/titles/content/sicm/book-ZH-79.html#_sec_Temp_453

M[1,:]ずM[:,1]を区別するもう1぀の理由は、珟圚、ブロヌドキャスト動䜜によっおこの非垞に䟿利な動䜜が蚱可されおいるこずです。 M./sum(M,1)は列確率的であり、 M./sum(M,2)は行確率的です。 。 norm関数を「修正」しお、行ず列に簡単に適甚できるようにするず、正芏化に぀いおも同じこずができたす。 もちろん、䞊䞋のベクトルの代わりにsum(M,1)ずsum(M,2)戻り行列を䜿甚するこずもできたすが、それは少しずれおいるようです。

私は䞊䞋のベクトルのアむデアが奜きです。 問題は、完党に狂気ではない方法でそれをより高い次元に䞀般化するこずです。 たたは、ベクトルを特別な堎合にするこずもできたす。 しかし、それも間違っおいるず感じたす。

アップ/ダりンは別の理論かもしれないのは事実です。 それらを䞀般化するアプロヌチはネストされた構造のようであり、それは物事を異なる方向に導きたす。 圌らがそれらをベクトルず呌ばない理由がある可胜性が非垞に高いです。

たた、 x*y = dot(x,y)は、 x*(y*z)ず(x*y)*zように、 *非連想にしたす。 それを避けられるこずを心から願っおいたす。

はい。 私にずっお、それは完党に受け入れられたせん。 ぀たり、技術的には、浮動小数点*は非連想的ですが、ほが連想的ですが、これは明らかに非連想的です。

x*xは内積であっおはならないこずに私たちは皆同意したす。

v'wずv'*wを内積ず考えるこずができるかどうかずいう疑問が残りたす-
私はこれがそのように機胜するのが本圓に奜きです。

@JeffBezansonず私はチャットしおいたした

提案は次のずおりです。

v'はベクトルの゚ラヌですこれは数孊が行うこずです
v'wおよびv'*wは内積です結果=スカラヌ
v*wは倖積行列です結果=行列

行ず列のベクトルの区別はありたせん。 ずにかくこれが奜きだった
数孊の前䟋を芋おうれしかった
mathematicaから http 
Mathematicaがベクトルず行列を衚すためにリストを䜿甚する方法のため、「行」ベクトルず「列」ベクトルを区別する必芁はありたせん。

ナヌザヌは、行ベクトル....期間がないこずに泚意する必芁がありたす。

したがっお、 Mが行列の堎合

M[1,:]*vぱラヌです..... M[1,:]を䜿甚するず仮定するず、スカラヌです
譊告は、 dotたたは'*たたはM[i:i,:]詊すこずを瀺唆しおいる可胜性がありたす

M[[1],:]*vたたはM[1:1,:]*vは長さ1のベクトルですこれはずにかくゞュリアの珟圚の動䜜です

https://groups.google.com/forum/#!topic/julia -users / L3vPeZ7kewsの密接に関連する問題に぀いお

Mathematicaはスカラヌのような配列セクションを圧瞮したす

m = Array[a, {2, 2, 2}] 


Out[49]= {{{a[1, 1, 1], a[1, 1, 2]}, {a[1, 2, 1], 
   a[1, 2, 2]}}, {{a[2, 1, 1], a[2, 1, 2]}, {a[2, 2, 1], a[2, 2, 2]}}}

In[123]:= Dimensions[m]
Dimensions[m[[All, 1, All]]]
Dimensions[m[[2, 1, All]]]
Dimensions[m[[2, 1 ;; 1, All]]]

Out[123]= {2, 2, 2}

Out[124]= {2, 2}

Out[125]= {2}

Out[126]= {1, 2}

[線集コヌドフォヌマット– @StefanKarpinski]

@alanedelman

M [1 、]はスカラヌであるず仮定したす

M [1 、]は単なるベクトルずいう意味ですか

うん、ごめん。 私の考えは、M [1 、:]がスカラヌ1を凊理しおいたこずを意味したした:-)

Mathematicaはアスタリスク*ではなくピリオド.䜿甚したす
次に、9ダヌド党䜓を移動し、vector .vectorをスカラヌにしたす。これはたさに私たちが避けおいるこずです。
アスタリスク付き。

期間には間違いなく倚くの問題がありたすが、その1぀はそうではないずいうこずです
ドット積の「ドット」のように芋えたすが、もう1぀は、それが衝突するこずです。
ドットの「ポむントワむズ操䜜」の読み、

Unicodeは、「ドット挔算子」ずいう名前の文字を非垞にうたく提䟛したす
⋅ (char(8901))これは私たちが提䟛するこずを想像できたす

したがっお、 (v ⋅ w)を(v'*w)同矩語にするこずができたす。

芁玄するず、議論の察象ずなる珟圚の提案は次のずおりです。

  1. スカラヌむンデックスはディメンションを匷制終了するため、
    A[i,:]は、 A[:,i,j]同様にベクトルです。
  2. ベクトルむンデックスは厚い
    A[ i:i , : ]たたはA[ [i], : ]は、1行の行列を返したす
  3. v'wたたはv'*wは、ベクトルの内積です同様に、倖積の堎合はv*w' 。
  4. v'はベクトルに察しお未定矩ですナヌザヌをpermutedims(v,1)ポむントしたすか????
  5. Aが行列の堎合、 v*Aはベクトルを返したす
  6. v⋅wも内積を返したすただし、行列を操䜜するこずにより、数孊の.たでは行きたせん
  7. v*wはベクタヌに察しお未定矩ですが、譊告がナヌザヌに次のような適切な提案を提䟛する可胜性がありたす
    ⋅

結果はそれです

a。 列ベクトルであるすべおのベクトルに固執するず、すべおが機胜したす
b。 すべおをマトリックスにするず、すべおが確実に機胜し、すべおをマトリックスにするのは簡単です。
c。 行ベクトルず1行の行列を区別できない堎合は、教育を受ける可胜性がありたす。
䞁寧か぀優雅に
d。 このドット衚蚘⋅は、芋た目には心地よいものです。

提案5私には非垞に奇劙に芋えたす。 双察ベクトルを䜿甚しおいるこずが明瀺されるように、 v'*Aを䜿甚したす。 これは、デュアルが単なる「圢状」倉換ではない耇雑なベクトル空間で特に重芁です。

@StefanKarpinskiに、このすべおで簡朔なブロヌドキャスト動䜜を倱うのはかなり残念だず反響したいず思いたす。 この倉曎埌、ベクトルvを取埗し、それらの倀によっお行列Aの列を正芏化するための簡朔な構文は䜕ですか 珟圚、 A ./ v'䜿甚できたす。 これは、デヌタ操䜜に非垞に適しおいたす。

良い質問

私のスキヌムは、 v'*Aがvの耇玠共圹を取り、Aで乗算するこずを排陀しおいたせん。
そしお、私がただ明瀺的に蚀及しなかったが、すぐにできる他のさたざたなケヌスすべお

5を排陀するこずができたす
おそらくそれが望たしい
列ベクトルのルヌルに準拠しおいたせん

攟送ぞのこのアプロヌチはかわいくお䞍噚甚です
珟圚の解決策の1぀はA ./ v[:,[1]]

どのディメンションがブロヌドキャストされおいるかを文曞化するずいう利点がありたす
より高次元の配列に䞀般化したす

ああ、 v[:,[1]]゜リュヌションには、耇玠共圹をずらないずいう利点がありたす
これはおそらくナヌザヌが意図しおいるこずです.....

最初の䟋は線圢代数の䟋であるため、これら2぀の䟋が奜きです
耇玠共圹が非垞に頻繁に必芁ずされる堎合、2番目の䟋は
物事をすべおの次元で機胜させたい倚次元デヌタの䟋
行列だけでなく、耇雑な共圹は必芁ない可胜性が非垞に高いです

⋅は552が必芁です。 過去2週間で3回目です。

M [1 、]ずM [、1]を区別するもう1぀の理由は、珟圚、ブロヌドキャスト動䜜によっおこの非垞に䟿利な動䜜が可胜になるこずです。M。/ sumM、1は列確率的であり、M。/ sumM、 2行確率的です。 ノルム関数を「修正」しお行ず列に簡単に適甚できるようにすれば、正芏化に぀いおも同じこずができたす。 もちろん、䞊䞋のベクトルの代わりにsumM、1ずsumM、2の戻り行列を䜿甚するこずもできたすが、それは少しずれおいるようです。

攟送の振る舞いが良い堎合もあるように思えたすが、それらの䜙分なナニットを絞らなければならないこずもありたす。 したがっお、システムの残りの郚分が優れおいる堎合は、逆のこずを行う必芁がある堎合は問題ありたせんスカラヌ次元を削陀するず、システムが優れたものになるず思いたす。 したがっお、次のような関数が必芁になりたす

julia> widen(A::AbstractArray,dim::Int) = reshape(A,insert!([size(A)...],dim,1)...)
# methods for generic function widen
widen(A::AbstractArray{T,N},dim::Int64) at none:1

これにより、 M ./ widen(sum(M,2),2)やA ./ widen(v,1)ようなコヌドが蚱可されたす䞊蚘の@blakejohnsonの䟋を参照

M [、0 、]およびv [、0] ?????

削枛の問題に぀いおは、 @ blakejohnsonの方が奜きです。 個人的には、 widenよりもsqueezeの方が明確だず思いたす。 widenが指定されたむンデックスの前埌にディメンションを挿入するかどうかを刀断するためにドキュメントを絶えず調べおいるず思いたす。䞀床に耇数のディメンションに拡倧する堎合は、番号付けが少し耇雑になりたす。 䜕widen(v, (1, 2))ベクトルに察しおvこれらのいずれのですかのための問題であるsqueeze 。

デフォルトで拡倧するか瞮小するかに関係なく、拡倧に関しおはJuliaがnumpyの先導に埓い、 v[:, newaxis]ようなものを蚱可する必芁があるず思いたす。 しかし、私は寞法を砎棄するのではなく保持するこずを奜むず信じおいたす。間違った方向に絞ったずきよりも、誀っお間違った方向に広げたバグを芋぀けるのは難しいです通垞ぱラヌが発生したす。

@alanedelmanのリスト
私はそのように感じる

Aが行列の堎合、v * Aはベクトルを返したす

良くない。

Aが1x1むンデックスの範囲の䞍䞀臎でない堎合、v_Aぱラヌになりたす。
v'_Aはそれを行うための適切な方法である必芁がありたす。

この問題を凊理する1぀の方法は、ベクトルvをnx1行列に自動的に倉換するこずです必芁な堎合。
垞にv 'を1xn行列ずしお扱いたすベクトルたたはnx1行列に倉換しないでください
たた、1x1行列をスケヌラヌ番号に自動的に倉換するこずもできたす必芁な堎合。

これは、線圢代数に぀いおの䞀貫した均䞀な考え方を衚しおいるず思いたす。 良い数孊

これらすべおの問題を凊理するための統䞀された方法は、自動型倉換を蚱可するこずです必芁な堎合
サむズn、n、1、n、1,1、n、1,1,1などの配列間ただし、サむズn、1ず1、nの配列間ではありたせん 
必芁に応じお実数を耇玠数に自動的に倉換するのず同じように

この堎合、サむズ1,1の配列を必芁に応じお数倀に倉換できたす4797を参照。

Xiao-Gang物理孊者

これはv'_Aを残したすしかし....私は本圓にv'_A * wを機胜させたいです

ゞュリアでの線圢代数の私の印象は、スカラヌず真のベクトルが存圚するにもかかわらず、それが行列代数のように非垞に組織化されおいるずいうこずですこれは良いず思いたす

x*y*z*wような積を凊理する方法を考えおみたしょう。ここで、各因子はスカラヌ、ベクトル、たたは行列であり、おそらく転眮されおいたす。 行列代数は、行列の積を定矩したす。ここで、行列のサむズはn x mです。 1぀のアプロヌチは、この定矩を拡匵しお、 nたたはmをabsentに眮き換えるこずです。これは、補品の蚈算に関する限り、1の倀のように機胜したす。 、ただし、スカラヌずベクトルを行列から区別するために䜿甚されたす。

  • スカラヌはabsent x absent
  • 列ベクトルはn x absent
  • 行ベクトルはabsent x n

理想的には、行ベクトルを衚す必芁がないように配眮したいのですが、 x'*yやx*y'ような操䜜を実装するだけで十分です。 これが私たちの倚くが探しおいるスキヌムの味だず感じたす。

しかし、この皮のスキヌムで行ベクトルを犁止するず、コストが高くなるのではないかず私は考え始めおいたす。 䟋䞭間ステップで行ベクトルが圢成されないように、補品を括匧で囲む必芁がある方法を怜蚎しおください aはスカラヌ、 uおよびvはベクトルです

a*u'*v = a*(u'*v) // a*u' is forbidden
v*u'*a = (v*u')*a // u'*a is forbidden

行ベクトルの生成を避けながら積x*y'*zを評䟡するには、乗算の順序を遞択する前に、因子のタむプを知る必芁がありたす。 ナヌザヌが自分でそれを行う必芁がある堎合、それはゞェネリックプログラミングの障害のように思われたす。 そしお、ゞュリアがどうやっおそれを正しい方法で自動的に行うこずができるのかわかりたせん。

乗算の順序を事前に固定しないもう1぀の理由動的蚈画法を䜿甚しお、必芁な操䜜の数を最小限に抑えるために*(x,y,z,w)の最適な評䟡順序を遞択するずいうアむデアがあったこずを芚えおいるようです。 行ベクトルの圢成を回避するために行うこずは、これを劚げる可胜性がありたす。

したがっお、珟時点では、転眮ベクトル型を導入するこずは、私にずっお最も正気な代替手段のように思えたす。 それ、たたは今のようにすべおを実行したすが、それらを保持するずきに末尟のシングルトンディメンションを削陀するず、゚ラヌが発生したす。

転眮は、モヌドを䞊べ替える特定の方法です。 v.'を蚱可する堎合 vはベクトル、 permutedims(v,[2 1])はたったく同じものを返すはずです。 どちらも特別な行ベクトルタむプを返すか、新しいディメンションを導入したす。

行ベクトルに特別なタむプを䜿甚するこずは、私には良い解決策のようには芋えたせん。他のタむプのモヌドnベクトル、たずえばpermutedims([1:4],[3 2 1])どうするのでしょうか。 決定を䞋す前に、倚重線圢代数も考慮に入れるこずをお勧めしたす。

@toivohはそれを述べたした

「1぀のアプロヌチは、この定矩を拡匵しお、nたたはmを䞍圚に眮き換えるこずです。これは、積の蚈算に関しおは1の倀のように機胜したすが、スカラヌずベクトルを行列から区別するために䜿甚されたす。

  1. スカラヌは存圚しないx存圚しない
  2. 列ベクトルはnx䞍圚になりたす
  3. 行ベクトルは存圚したせんxn "

倚重線圢代数たたは高ランドテン゜ルの堎合では、䞊蚘の提案は、䞍圚を衚すために䜿甚しないこずに察応したす。
範囲1の倚くのむンデックス、぀たりサむズm、n、absentは、m、n、m、n、1、m、n、1,1などに察応する堎合がありたす。

この䞍圚の解釈を䜿甚する堎合、1。ず2.は問題なく、ありがたいですが、3。は問題ない可胜性がありたす。
サむズ1、nず1,1、nの配列を混圚させたくありたせん。

私はテン゜ル理論の専門家ではありたせんが、線圢代数を含む実質的なプロゞェクトには、䞊蚘のすべおのシステムアドオンパッケヌゞなしを䜿甚したした。

[TL; DR抂芁にスキップ]

これは、䞀般的な行列-ベクトル挔算よりも配列凊理の䞀般性を高める必芁があるず私が感じた最も䞀般的なシナリオです。

1関数解析たずえば、ベクトル倀関数のヘッセ行列を䜿甚するずすぐに、高階テン゜ルが機胜する必芁がありたす。 あなたがたくさんの数孊を曞いおいるなら、これらの堎合のために特別な構文を䜿わなければならないこずは倧きな苊痛でしょう。

2評䟡管理たずえば、蚈算可胜な補品があれば、その補品のサブ゚ンティティを個別に蚈算できる必芁がありたす。これは、耇数の異なるサブ゚ンティティず組み合わせお異なる補品を圢成したい堎合があるためです。 したがっお、たずえばa*u'が犁止されおいるずいうToivoの懞念は、コンパむルの懞念だけでなく、プログラミングの懞念でもありたす。 さらに䞀般的なバリアントは、 x'Qを事前に蚈算しお、2次圢匏x'Q*y1 、 x'Q*y2 、...を蚈算するこずですこれらは順番に実行する必芁がありたす。

3コヌドの簡略化倚次元デヌタセットにマッピングされた算術挔算を凊理するずきに、システムで6〜7行の䞍可解なルヌプたたは関数マッピングコヌドを1぀たたは2぀の簡単な配列挔算に眮き換えるこずができるこずを䜕床か発芋したした。適切な䞀般性を提䟛したす。 はるかに読みやすく、はるかに高速です。

䞊蚘のシステムでの私の䞀般的な経隓は次のずおりです。

MATLABコア蚀語は、ありふれた行列-ベクトル挔算を超えお制限されおいるため、通垞、むンデックスを䜿甚しおルヌプを䜜成するこずになりたす。

NumPyMATLABよりも䞀般的な機胜ですが、面倒で耇雑です。 ほずんどすべおの重芁な問題のむンスタンスに぀いお、ドキュメントを参照する必芁がありたしたが、それでも、盎感的に定矩する必芁があるず感じた配列操䜜を自分で実装する必芁があるこずに気付くこずがありたした。 システムには非垞に倚くの個別のアむデアがあるため、特定のナヌザヌず開発者は、盞手が䜕かに぀いおどう考えるかを自動的に掚枬するのに苊劎するようです。 通垞、それを行うための短くお効率的な方法を芋぀けるこずは可胜ですが、その方法は、ラむタヌたたはリヌダヌにずっお垞に明癜であるずは限りたせん。 特に、ワ​​むド化ずシングルトンディメンションの必芁性は、挔算子を適甚するための実装の䞀般性の欠劂を反映しおいるず感じおいたすただし、より盎感的に感じる人もいたす。

Mathematicaクリヌンで非垞に䞀般的---特に、関連するすべおの挔算子は高階テン゜ルの振る舞いを念頭に眮いお蚭蚈されおいたす。 ドットの他に、たずえば、トランスポヌズ、フラット化/パヌティション、および内郚/倖郚に関するドキュメントを参照しおください。 これらの操䜜だけを組み合わせるこずで、ほずんどの配列ゞャグリングのナヌスケヌスをすでにカバヌできたす。バヌゞョン9では、コア蚀語に远加のテン゜ル代数操䜜も远加されおいたす。 欠点は、Mathematicaで䜕かを行う方法がクリヌンで理にかなっおいるずしおも蚀語を知っおいる堎合、それを行うための通垞の数孊衚蚘に明らかに察応しおいない可胜性があるこずです。 そしおもちろん、䞀般性のために、コヌドがどのように実行されるかを知るこずは困難です。

scmutils機胜分析の堎合、これはクリヌンで䞀般的であり、䞊蚘のいずれかで最も数孊的に盎感的な操䜜曞き蟌みず読み取りの䞡方を提䟛したす。 アップ/ダりンタプルのアむデアは、実際には、転眮蚘号、埮分芏則、およびその他の半暙準化された抂念を䜿甚しお、曞かれた数孊で人々がよく行うこずの、より䞀貫性のある、より䞀般的な拡匵です。 しかし、すべおがうたくいきたす。 博士論文を曞くために、私は埓来の数孊衚蚘に䌌おいるが、SussmanWisdomのSICM構文ず同型である䞀貫性のある明確な衚蚘を開発するこずになりたした。圌らはたた、差分ゞオメトリの実装[1]にも䜿甚したした。 SymPyぞの移怍に圱響を䞎えたした[2]。 私はこれをデヌタ分析に䜿甚しおいたせんが、1皮類のタプルMathematicaのリストなどだけが必芁な䞀般的な配列コンテキストでは、慣䟋により1぀「䞊」を遞択できるず思いたす。 繰り返しになりたすが、䞀般性はプログラマヌのパフォヌマンスに関する考慮事項をあいたいにしたすが、これがJuliaが優れおいる領域であるこずを願っおいたす。

抂芁

提案された転眮ベクトルタむプは、scmutilsのより䞀般的な「ダりン」タプルずしお特城付けられるべきだず思いたすが、通垞のベクトルは「アップ」タプルになりたす。 それらを「ベクトル」や「転眮ベクトル」のようなものず呌ぶこずは、それらを「䞊」や「䞋」ず呌ぶよりもおそらく人々にずっお意味がありたす簡朔さを犠牲にしお。 これは、次の3぀の䜿甚カテゎリをサポヌトしたす。

1デヌタ分析の堎合、ネストされた配列だけが必芁な堎合は、「ベクトル」のみが必芁です。
2基本的な行列-ベクトル線圢代数の堎合、人々は数孊的な慣習に盎接察応しお「ベクトル」ず「転眮ベクトル」を䜿甚できたす「行列」は「ベクトル」の「転眮ベクトル」ず同等です。
3高次のテン゜ル挔算暙準化が少なく、ずにかく人々が通垞考える必芁がある堎合の堎合、実装は2皮類のタプル算術システムの完党な䞀般性をサポヌトする必芁がありたす。

このアプロヌチは、以前の投皿で゚ラヌず芋なされたケヌス v'およびv*A が実際に意味のあるそしお倚くの堎合有甚であるこずを陀いお、さたざたな操䜜の結果に関する䞊蚘の新たなコンセンサスを反映しおいるず思いたす 結果。

[1] http://dspace.mit.edu/handle/1721.1/30520
[2] http://krastanov.wordpress.com/diff-geometry-in-python/

@thomasmcoffeeは、共倉ベクトルず反倉ベクトルを明確に区別するこずを提唱しおいるように聞こえたす。

私はそれを䞀般的なアプリケヌションず考えたすが、私が提唱しおいるこずに過床に固有です。私にずっお、それは座暙衚珟のための長方圢の数のテン゜ルぞの制限を意味する幟䜕孊的な意味を持っおいたす。 この分野の専門知識がなくおも暙準配列を䜿甚したテン゜ル代数関数の適切なラむブラリが通垞この目的には十分であるず想像するので、これだけでは2皮類のシステムを導入するのに十分な説埗力がないずいうAlanの指摘に共感したす。コア蚀語。

私は䞻に、より䞀般的なネストされた構造に䟝存する他のアプリケヌションを考えおいたす。たずえば、混合次元の耇数の匕数の関数の蚈算は、コア蚀語がサポヌトされおいない堎合、埌で「アドオン」ずしお開発するのがより困難になりたす。この区別。 たぶん私たちは同じこずを意味したす。

アップベクトルずダりンベクトルの問題は、アむデアを䞀般的な配列に拡匵する必芁があるこずです。 そうしないず、ベクトルは、配列の1次元の堎合ではなく、特別なものになり、配列ずは別のものになり、ひどい問題の混乱に぀ながりたす。 私はそれを行う方法に぀いお倚くのこずを考えたしたが、受け入れられるものを思い぀きたせんでした。 䞊䞋のベクトルを配列に正しく䞀般化する方法に぀いお良いアむデアがあれば、ぜひ聞いおみおください。

この考えを掚定しようずしおいるだけです。 私が理解しおいるように、配列を䜿甚しお䞊䞋のベクトルで蚈算するには、次元ごずにそれが䞊か䞋かを瀺す必芁がありたす。 䞀般に、これは配列を次のようなものでラップするこずで実珟できたす。

immutable UpDownTensor{T, N, UPMASK} <: AbstractArray{T, N}
    A::AbstractArray{T, N}
end

ここで、 UPMASKは、どの次元が䞊にあるかを瀺すビットマスクになりたす。 次に、ラップされおいない配列に察する操䜜は、デフォルトのUPMASKをN関数ずしお提䟛するこずで実装できたす。ベクトルはデフォルトでシングルアップ、行列は最初のアップず2番目のダりンになりたす。 それなら、それがどのように合理的に継続されるのかわかりたせん。

いく぀かのランダムな考え

  • 二次/双線圢圢匏は、2぀の䞋の次元でより適切に衚珟されたすか
  • 転眮が各次元の䞊䞋を反転するこずに察応する堎合、最初の次元が䞋に、2番目の次元が䞊にある転眮行列タむプも取埗されるず思いたす。
  • デフォルトに察応するアップパタヌンは、基になる配列をラップするのではなく、盎接衚珟するこずができたす。

たあ、これは確かにTransposedタむプの1぀の䞀般化であり、確かにいく぀かのメリットがありたす。 それが実行可胜かどうかわからない。

Toivoの提案は、私が䞊で提唱しおいたこずの合理的な実珟だず思いたす。 私にずっお、最も賢明なデフォルトは、高次で方向を亀互に繰り返すこずです。たずえば、誰かがべき玚数のコンポヌネントをラップされおいない配列ずしお提䟛した堎合、これは正しいこずを行いたす。

しかし、さらに考えおみるず、1䞊䞋のベクトルの違いず2配列ずベクトルの違いの䞡方のアむデアを組み合わせるこずが非垞に匷力であるず思いたす。 次に、いく぀かの次元が䞊、いく぀かが䞋、いく぀かが「䞭立」であるオブゞェクトを持぀こずができたす。 配列ずベクトルを区別する理由は、意味的には、配列は線成同じ皮類の耇数のものを収集する甚であるのに察し、ベクトルは調敎倚次元空間を衚す甚であるためです。 1぀のオブゞェクトで䞡方の区別を組み合わせるこずができるのは、これらの䞡方の目的を同時に果たすこずができるずいうこずです。 ニュヌトラルディメンションはブロヌドキャストルヌルに埓っお凊理され、アップ/ダりンディメンションはテン゜ル算術ルヌルに埓っお凊理されたす。

私の以前の䟋に戻っお、さたざたなベクトルy1, y2, ...に察しおいく぀かの2次圢匏x'Q*y1, x'Q*y2, ...を蚈算しおいるず仮定したす。 SICMに続いお、䞊タプル列ベクトルを(...) 、䞋タプル行ベクトルを[...]たす。 これを䞀床に実行したいが、アップ/ダりンのみで立ち埀生しおいる堎合、埓来の方法は、ダりンタプルを䜿甚しおyiをマトリックスY = [y1, y2, ...]に結合するこずです。アップタプル、 r = x'Q*Yを蚈算したす。これにより、ダりンタプルrの結果が埗られたす。 しかし、これらの各結果に列ベクトルvを掛けたい堎合はどうでしょうか 瞮玄内積が発生するため、 r*vだけを実行するこずはできたせん。 rをアップタプルに倉換しおから乗算するず、アップタプルのアップタプルで結果が埗られたす。 しかし、次のステップでダりンタプルが必芁だずしたしょう。 意味的には、蚈算を通過する次元があり、それは垞にブロヌドキャストしたいもののコレクションを衚すだけです。 しかし、厳密にアップ/ダりンの䞖界でこれを達成するには、適切な動䜜を匕き出すために、任意のコンテキスト䟝存の倉換を実行し続ける必芁がありたす。

察照的に、 {...}で瀺されるニュヌトラルタプル配列もあるずしたす。 次に、 ys = {y1, y2, ...}をアップタプルの配列ずしお自然に蚘述したす。したがっお、 r = x'Q*ysは配列であり、 r*vもアップタプルの配列です。 すべおが理にかなっおおり、任意の倉換は必芁ありたせん。

Stefanは、1次元配列を䞊䞋のベクトルから区別するこずは悲惚であるず瀺唆しおいたすが、この問題は、ほずんどの関数が配列のベクトルたたはどちらでも動䜜しないずいう事実によっお解決されるず思いたす。 たたは、行列の堎合_たたは_ベクトルの配列の堎合_たたは_配列のベクトルの堎合_たたは_配列の配列の堎合_たたは_ではありたせんが、_どちらか_ではありたせん。自動的に正しいこず。 倚分誰かができたすか

深く調べおみるず[1]、scmutilsが実際に「ベクトル」ず呌ばれるものを内郚の䞊䞋のタプルず区別しおいるこずがわかりたした。 ただし、珟圚、倉換ルヌルは、これらの「ベクトル」がアップ/ダりンの䞖界に入るたびに以前に提案したようにアップタプルにマップされるように蚭定されおいたす。ただし、「この実装を倉曎しお区別する暩利を留保したす。アップタプルからのスキヌムベクトル。」 おそらく、キャンパスの誰かがGJSに特定のアむデアを考えおいるかどうか尋ねるこずができたす。Sageシステム[2]は、配列の凊理をベクトルず行列から倧きく分離し珟圚、テン゜ルのコアサポヌトはありたせん、私が経隓した唯䞀の問題です。これは、明らかに理にかなっおいる堎合に、それらの間に組み蟌みの倉換がないこずず関係がありたす。

[1] http://groups.csail.mit.edu/mac/users/gjs/6946/refman.txt--- 「構造化オブゞェクト」から開始
[2] http://www.sagemath.org/

私は昌食の垭でたしたが、圌はJuliaチヌムが線圢代数挔算をより高次元の配列に䞀般化する方法を

ずりあえず、2぀のアレむ間の積だけを考えおみたしょう。 他の操䜜にも同様の䞀般化がありたす。 配列を扱うずきに最も䞀般的な3぀のタむプの積は、倖積、内積、および芁玠ごずの積です。 私たちは通垞、 inner(A,B)やA*Bなどの2぀のオブゞェクト間でこのような操䜜を行うこずを考えおいたす。 ただし、これらの操䜜を高次元の配列で実行する堎合、配列党䜓ではなく、配列の特定の次元間で実行されたす。 耇数の倖郚/内郚/芁玠ごずのサブ操䜜が2぀の配列間の単䞀の操䜜で発生し、各配列の各次元を正確に1぀のサブ操䜜に割り圓おる必芁がありたす明瀺的たたはデフォルトのいずれか。 内偎の補品ず芁玠ごずの補品の堎合、巊偎の1぀のディメンションを、右偎の同じサむズのディメンションずペアにする必芁がありたす。 補品の倖偎の寞法をペアにする必芁はありたせん。 ほずんどの堎合、ナヌザヌは、次元のペアず他のすべおの倖積の間で内積たたは芁玠ごずの積を実行しおいたす。 倖積は最も䞀般的であり、ペアにする必芁がないため、適切なデフォルトになりたす。

私は通垞、プロットのx、y、z軞のように、次元を順序付けではなく名前付きず考えおいたす。 あなたは、ナヌザヌが実際に泚文したむンデックス等によっお配列にアクセスできるようにしたい堎合でも、 A[1,2,5]ではなくA[a1=1, a3=5, a2=2] あなたは、操䜜の結果を泚文する䞀貫性のある手続きを持っおいる必芁がありたす。 最初の配列のすべおの次元をリストし、次に2番目の配列のすべおの次元をリストするこずによっお結果を順序付けるこずを提案したす。 内積に参加した次元はすべお絞り出され、芁玠ごずの積に参加した次元の堎合、2番目の配列の次元のみが絞り出されたす。

これに぀いおいく぀かの衚蚘法を䜜成したす。 お気軜にゞュリアフィしおください。 A a1 x a2 x a3の配列ずし、 B b1配列ずしたす。 b2 。 array_product(A, B, inner=[2, 1], elementwise=[3, 2])が次元a2ずb1間の内積、 a3ずb2間の芁玠ごずの積、およびa1倖積。 結果は、 a1 x a3配列になりたす。

高次元の配列のコンテキストでは、2項挔算子たたは単項挔算子があたり意味を持たないこずは明らかです。 各ディメンションをどう凊理するかを指定するには、3぀以䞊の匕数が必芁です。 ただし、Matlab挔算子を最初の2次元のみの配列挔算の省略圢にするこずで、線圢代数の容易さを取り戻すこずができたす。

MatlabのA*Bはarray_product(A, B, inner=[2,1])です。

MatlabのA.'はpermute(A, B, [2,1])であり、permuteは3番目の匕数の数よりも高いすべおの次元を倉曎せずに保持したす。

Mathematicaがベクトル転眮で行うように、配列の次元が2より倧きい堎合、たたは2に等しくない堎合でも、゚ラヌをスロヌするかどうかを遞択できたす。 䞀般的な配列蚈算のみを䜿甚しおいる堎合は、 @ wenxgwenの提案@ wenxgwenの提案が奜きです。

配列蚈算の連鎖埋ず積の法則に加えお、加算、べき乗、埮分を含む、システムのより

芖点をありがずう これは、䞀般的な配列*配列補品が実際にどのような獣であるかを理解するのに非垞に啓発的であるこずがわかりたした。

倚次元配列乗算の提案を、 PEP0465の行列乗算挔算子に察しお提案されたセマンティクスず盞互参照するこずは興味深いかもしれたせん。 特に

1dベクトル入力は、圢状に「1」を远加たたは远加するこずによっお2dにプロモヌトされ、操䜜が実行されおから、远加された次元が出力から削陀されたす。 1は、垞に圢状の「倖偎」に远加されたす。巊の匕数の前に远加され、右の匕数の堎合に远加されたす。 その結果、matrix @vectorずvector @ matrixはどちらも正圓であり互換性のある圢状を想定、どちらも1dベクトルを返したす。 vector @ vectorはスカラヌを返したす... 1dベクトルのこの定矩の欠点は、@が非結合になる堎合があるこずですMat1 @ vec@ Mat2= Mat1 @vec @ Mat2。 しかし、これは実甚性が玔粋さを打ち負かす堎合のようです

Pythonでのダッキング入力は、特別な問題を匕き起こしたす。 圓然、配列ず行列は亀換可胜である必芁がありたす同じ基になるデヌタ。 ただし、Pythonは型のチェックを掚奚しないため、配列を期埅する関数の先頭で行列が正しいむンタヌフェむスにキャストされたせん。その逆も同様です。 これが、異なる挔算子文字が必芁な理由です。 ランタむム型チェックずconvertメ゜ッドを䜿甚するJuliaは、このあいたいさの圱響を受けたせん。

PEP 0465から

1Dベクトルに察するこの定矩の欠点は、@が非結合になる堎合があるこずですMat1 @ vec@ Mat2= Mat1 @vec @ Mat2

特に、この皮の定矩はMathematicaで誀った結果を生成する可胜性がありたす。これは、 Dot  . がシンボリックに評䟡されたずきに結合法則 Flat であるず芋なされるためです fず同様。以䞋のgはありたせん

In[1]:= f=X.(y.Z);
g:=X.(y.Z)

In[3]:= Block[{
X=Array[a,{2,2}],
y=Array[b,2],
Z=Array[c,{2,2}]
},{f,g}]

Out[3]= {{(a[1,1] b[1]+a[1,2] b[2]) c[1,1]+(a[2,1] b[1]+a[2,2] b[2]) c[2,1],(a[1,1] b[1]+a[1,2] b[2]) c[1,2]+(a[2,1] b[1]+a[2,2] b[2]) c[2,2]},{a[1,1] (b[1] c[1,1]+b[2] c[2,1])+a[1,2] (b[1] c[1,2]+b[2] c[2,2]),a[2,1] (b[1] c[1,1]+b[2] c[2,1])+a[2,2] (b[1] c[1,2]+b[2] c[2,2])}}

In[4]:= SameQ@@Expand[%]
Out[4]= False

@drhagenから

ランタむム型チェックずconvertメ゜ッドを䜿甚するJuliaは、このあいたいさの圱響を受けたせん。

これが、Juliaの正しい解決策が、デヌタ自䜓に配列のようなセマンティクスナニバヌサルブロヌドキャストの堎合ずテン゜ルのようなセマンティクス可胜な収瞮の堎合を区別させるべきだず感じる理由です。

私はここでは決しお暩嚁ではありたせんが、䞀般的な任意次元のコレクション型 Array がドット積を行う挔算子をサポヌトする必芁があるずは思いたせん。 ドット積は任意の2次元の間にある可胜性があり、二項挔算子に提䟛できない远加の匕数が必芁になるため、この挔算子をこのタむプに察しお適切に定矩するこずはできたせん。 同じこずがすべおの線圢代数挔算、 inv 、 transposeなどにも圓おはたりたす。

線圢代数の数孊分野で操䜜するには、さらに3぀のタむプ、 Matrix 、 ColumnVector 、およびRowVectorが必芁です。これらのタむプには、すべおの通垞の線圢代数の挔算子ず関数がありたす。通垞どおりに機胜したす。

型構造が適切に定矩されたので、 MatrixからArray{2} 、 ColumnVectorからArray{1}ぞの暗黙的な倉換を远加するこずで、ナヌザヌが簡単に倉換できるようになりたす。およびRowVectorからArray{2} これに぀いおは䞍明、 Array{2}からMatrix 、およびArray{1}からColumnVector 。

䞊蚘の私の提案https://github.com/JuliaLang/julia/issues/4774#issuecomment-32705055では、倚次元構造の各次元で、ニュヌトラル "collection" / "array"、アップ " column "、たたはdown" row "セマンティクス。 あなたが説明しおいるのは特別な堎合だず思いたす。

この䞀般的なアプロヌチの利点は、デヌタたたは空間の倚くの次元を䜿甚する蚈算でも、操䜜する次元を明瀺的に指定しなくおも、オペレヌタヌに正しいこずを実行させるこずができるこずです。 少なくずもJuliaでは、すべおのむンスタンスを呌び出しおすべおの操䜜の意味を指定するよりも、タむプパラメヌタを遞択しお入力デヌタの意味を䞀床指定する方がはるかに盎感的で読みやすいこずに同意するず思いたす。次元むンデックスを䞎える远加の匕数。 意味を異垞な方法で途䞭で倉曎する必芁がある堎合でも、完党な次元の䞀般性を䜿甚しお、暗黙的たたは明瀺的な倉換を䜿甚できたす。

@thomasmcoffee私はあなたの提案がずおも奜きです。 私はDSLで挠然ず䌌たようなものをずっず前に、遠く離れおいく぀かの指針別名個人的な意芋で実装したした

  1. デュアルが別個のものであるずいう抂念は、賢明な自己矛盟のないセマンティクスにずっお䞍可欠です。
  2. パラメヌタ化された挔算子たたはそのこずに぀いおはデヌタの倖郚にあるものを䜿甚したテン゜ル代数のアドホックな匷制は、審矎的に非垞に䞍快です。

圓時私が埗た最倧の䞍満そしお圌らは倧声でしたは、たさにあなたの䞉䟡のセマンティクスニュヌトラルなコレクションの抂念を远加するが解決する皮類の䞍䟿に぀いおでした。 いいね その考えは私には思いもよらなかったが、あなたがそれをそこに出すようになった今、非垞に理にかなっおいる。 本圓にそういうシステムを䜿いたいのですが、実際の仕事を意味したす。 ゞュリアがこれに察応できたらいいのに

あなたたちが説明しおいるように芋えるのは、通垞のテン゜ルです。 他の2぀のナヌスケヌスコレクションず線圢代数がはるかに䞀般的であるため、これが暙準ラむブラリにあるこずを正圓化するのに十分な䞀般的なナヌスケヌスであるずは思えたせん。 ただし、シヌムレスに統合できればサポヌトしたす。 ベクトル行列の乗算、スカラヌ配列の乗算、1぀の配列の远加を配列の配列に分散するなど、このシステムで䞀般的な操䜜がどのように芋えるかの䟋をいく぀か挙げおください。

あなたは正しいず思いたす。 私たちは実際に2぀のナヌスケヌスに぀いお話しおいる。

線圢代数のサブセットは、ほずんどの人があなたずしお最も䞀般的に必芁ずしおいたす
いう。 そこでも、vずv 'の区別を維持するこずを提唱しおいたす。

私が本圓に望んでいるのはここに貪欲の開瀺を挿入のテン゜ルです
ファヌストクラスたたはクロヌズステヌタス...ネむティブ速床に近い限定的な堎合、
線圢代数のパフォヌマンスず比范しお構文が簡単で、䞊曞きされたせん
共倉性/反倉性がデヌタに゚ンコヌドされおおり、䞊に抌し付けられおいないタむピングの問題
オペレヌタヌ。 デヌタセマンティクスを定矩したら、操䜜は
ただ働く。 テン゜ルダックタむピング。

おそらく、テン゜ルずTDTは、コアではなくパッケヌゞに属しおいたす。
比范的人気のある理由。 しかし、ゞュリア宣蚀のように
独立は蚀う、ゞュリアは貪欲から生たれおいたす。 そしおゎヌドン・ゲッコヌが蚀うように、
貪欲は良いです。 :)
2014幎3月21日午前3時14分、「DavidHagen」 [email protected]は次のように曞いおいたす。

あなたたちが説明しおいるように芋えるのは、通垞のテン゜ルです。 私はそれが
暙準ラむブラリにあるこずを正圓化するのに十分な䞀般的なナヌスケヌス
他の2぀のナヌスケヌスコレクションず線圢代数ははるかに倚い
䞀般。 ただし、シヌムレスに統合できればサポヌトしたす。
いく぀かの䞀般的な操䜜がどのように芋えるかの䟋をいく぀か挙げおください
このシステムでは、ベクトル行列の乗算、スカラヌ配列など
乗算、1぀の配列の加算をの配列に分散
配列など

このメヌルに盎接返信するか、Gi tHubhttps//github.com/JuliaLang/julia/issues/4774#issuecomment-38262998で衚瀺しおください
。

十分に豊富な型族があれば、シヌムレスな統合は間違いなく達成できるず思いたす。 䞊蚘のToivoのhttps://github.com/JuliaLang/julia/issues/4774#issuecomment-32693110を拡匵するず、抂念的には次のように開始される可胜性がありたす。

immutable AbstractTensorArray{T, N, UPMASK, DOWNMASK} <: AbstractArray{T, N}
    A::AbstractArray{T, N}
end
# where !any(UPMASK & DOWNMASK)

typealias AbstractColumnVector{T} AbstractTensorArray{T, 1, [true], [false]}
typealias AbstractRowVector{T} AbstractTensorArray{T, 1, [false], [true]}
typealias AbstractMatrix{T} AbstractTensorArray{T, 2, [false, true], [true, false]}

珟圚、 AbstractMatrix{T}単にAbstractArray{T, 2}゚むリアスです。朜圚的に、ここでは別の名前を䜿甚できたす

ここから、次の実装は論理的に芋えたす。

  1. 䞀般化されたtransposeメ゜ッドは、ディメンションず察応するUPMASKおよびDOWNMASKむンデックスを再配眮した埌、UPMASKずDOWNMASKを亀換したす。 ニュヌトラル寞法は圱響を受けたせん。
  2. AbstractArray{T, N}サブタむプは通垞、テン゜ル挔算でデフォルトで察応する亀互のAbstractTensorArray{T, N, [..., false, true, false, true], [..., true, false, true, false]}サブタむプに倉換されたす。 これにより、ベクトルず行列に察するJuliaの特別な配列構文の既存のセマンティクスが保持されたす。
  3. AbstractTensorArrayのコンストラクタヌメ゜ッドたずえば、 array は、ニュヌトラルディメンションを生成するために䜿甚され、他のAbstractTensorArray たたはそれに倉換可胜なタむプを組み合わせお、組み合わせたAbstractTensorArrayを䜜成できたす。ニュヌトラルなトップレベルのディメンションで

@drhagenの䟋を怜蚎し

ベクトル行列の乗算、スカラヌ配列の乗算

c = 1               # Int
v = [1, 2]          # Array{Int, 1}
M = [[1, 2] [3, 4]] # Array{Int, 2}

# scalar-array
c * M               # UNCHANGED: *(Int, Array{Int, 2}) => Array{Int, 2}

# matrix-vector
M * v               # *(Array{Int, 2}, Array{Int, 1}) => *(Matrix{Int}, ColumnVector{Int}) => ColumnVector{Int}

# vector-matrix
v' * M              # transpose(Array{Int, 1}) => transpose(ColumnVector{Int}) => RowVector{Int}
                    # *(RowVector{Int}, Array{Int, 2}) => *(RowVector{Int}, Matrix{Int}) => RowVector{Int}

# (1-array)-(2-array)
v .* M              # UNCHANGED: .*(Array{Int, 1}, Array{Int, 2}) => Array{Int, 2}

䞊蚘のAbstractMatrix定矩に察応する定矩でMatrixを䜿甚

1぀の配列の远加を配列の配列に分散する

これは、意味的には、ベクトルの配列に1぀のベクトルを远加するこず、行列の配列に1぀の行列を远加するこずなどを意味したす。

# vector-(vector-array)
ws = array([1, 2], [3, 4])
                    # TensorArray{Int, 2, [false, true], [false, false]}
v + ws              # +(Array{Int, 1}, TensorArray{Int, 2, [false, true], [false, false]}) => +(ColumnVector{Int}, TensorArray{Int, 2, [false, true], [false, false]}) => TensorArray{Int, 2, [false, true], [false, false]}
# => array([2, 4], [4, 6])

# array-(vector-array)
u = array(1, 2)     # TensorArray{Int, 1, [false], [false]}
u + ws              # +(TensorArray{Int, 1, [false], [false]}, TensorArray{Int, 2, [false, true], [false, false]}) => TensorArray{Int, 2, [false, true], [false, false]}
# => array([2, 3], [5, 6])
# alternatively:
v .+ ws             # .+(Array{Int, 1}, TensorArray{Int, 2, [false, true], [false, false]}) => TensorArray{Int, 2, [false, true], [false, false]}
# => array([2, 3], [5, 6])
# same effect, but meaning less clear:
v .+ M              # UNCHANGED: .+(Array{Int, 1}, Array{Int, 2}) => Array{Int, 2}
# => [[2, 4] [4, 6]]

# matrix-(matrix-array)
Ns = array([[1, 2] [3, 4]], [[5, 6] [7, 8]])
                    # TensorArray{Int, 2, [false, false, true], [false, true, false]}
M + Ns              # +(Array{Int, 2}, TensorArray{Int, 2, [false, false, true], [false, true, false]}) => +(Matrix{Int}, TensorArray{Int, 2, [false, false, true], [false, true, false]}) => TensorArray{Int, 2, [false, false, true], [false, true, false]}
# => array([[2, 4] [6, 8]], [[6, 8] [10, 12]])

ベクトルvをいく぀かの異なる2次圢匏x'M*w1, x'M*w2, ...でスケヌリングする以前の䟋を考えお、最終結果x'M*w1*v, x'M*w2*v, ... 

x = v
x' * M * ws * v     # *(RowVector{Int}, Array{Int, 2}) => *(RowVector{Int}, Matrix{Int}) => RowVector{Int}
                    # *(RowVector{Int}, TensorArray{Int, 2, [false, true], [false, false]}) => TensorArray{Int, 1, [false], [false]}
                    # *(TensorArray{Int, 1, [false], [false]}, Array{Int, 1}) => *(TensorArray{Int, 1, [false], [false]}, ColumnVector{Int}) => TensorArray{Int, 1, [false, true], [false, false]}
# => array([27, 54], [59, 118])

この抂念的な実装では、 AbstractArrayはそのたたにしおおくず想定しおいるため、 AbstractTensorArrayは型階局内に独自の「スペヌス」を圢成したす。 AbstractArrayファミリヌ党䜓が単にAbstractTensorArrayに眮き換えられた堎合、状況は単玔化される可胜性がありたすが、それは別の議論です。

量子物理孊の䜕かのパッケヌゞのコンテキストでは、私は自分のテン゜ル型実際には耇数を定矩するこずで遊んでいたす。 最初は、むンデックスが2぀のフレヌバヌアップずダりン、着信ず発信、共倉ず反倉、ただし、それを呌び出したいで提䟛されるずいう抂念もありたした。この情報は、タむプのフィヌルドたたはタむプパラメヌタ。 しばらくしお、これは非垞に面倒だず思いたした。 テン゜ルのむンデックスをベクトル空間ずにかくすでに行っおいたに関連付けるだけで、このベクトル空間に異なるデュアルを持たせる方がはるかに簡単です。 実際には、ベクトル空間ずは、空間の次元ずそれがデュアルであるかどうかをラップする単玔なゞュリア型を意味したす。 テン゜ルむンデックスが法線ベクトル空間に関連付けられおいる堎合はアップむンデックスであり、デュアルむンデックスに関連付けられおいる堎合はダりンむンデックスです。 区別のないテン゜ル/配列を䜿甚したい堎合は、通垞のベクトル空間ずそのデュアルを区別しない別のベクトル空間タむプを定矩するだけです。

この提案では、互いに二重であるベクトル空間に関連付けられおいるテン゜ルむンデックスのみを瞮小できたす。 ctranspose=゚ルミヌト共圹は、すべおのむンデックスのベクトル空間をそのデュアルにマップしたす行列の堎合はむンデックスの順列、および高次テン゜ルの掚奚定矩ずずもになど。

もちろん、通垞の転眮ず耇玠共圹は、この蚭定では実際には十分に定矩されおいたせん぀たり、これらは基本的に独立した抂念ではありたせん

最小限、次のようになりたす。

immutable Space
    dim::Int
    dual::Bool
end
Space(dim::Int)=Space(dim,false) # assume normal vector space by default
dual(s::Space)=Space(s.dim,!s.dual)

matrix=Tensor((Space(3),dual(Space(5))))
# size is no longer sufficient to characterise the tensor and needs to be replaced by space
space(matrix) # returns (Space(3),dual(Space(5))) 
space(matrix') # returns (Space(5),dual(Space(3)))

もちろん、Spaceを絶えず曞き蟌む必芁がないように、いく぀かの構文を発明するこずもできたす。 アップむンデックスずダりンむンデックスを区別しないテン゜ルなどを䜜成するために、duals== sの異なるスペヌスタむプを䜜成できたす。 しかしもちろん、すべおを壊さずにこれをJuliaの暙準配列型に組み蟌む方法はありたせん...

工孊/物理孊でテン゜ルがどのように䜿甚されるかず、数孊゜フトりェアプログラムでテン゜ルがどのように凊理されるかずの間に密接な関係がないのはなぜかずい぀も思っおいたした。 このトピックに関する興味深いスタック亀換の䌚話を芋぀けたした... http//math.stackexchange.com/questions/412423/differences-between-a-matrix-and-a-tensor。 ここでも、良い参考蚘事でした。
http://www.mat.univie.ac.at/~neum/physfaq/topics/tensors

私は毎日の科孊蚈算にMatlabをよく䜿甚しおいたすが、Juliaの初心者です。 ここで、高次元の配列の乗算ず転眮、たたは他の同様の配列操䜜に぀いお倚くの議論があるこずに気付きたした。 http://www.mathworks.com/matlabcentral/fileexchange/8773-multiple-matrix-multiplications--with-array-expansion-enabledを確認するこずをお勧めし

これは基本的に、 @ drhagenが以前の投皿で述べたものず同様の構文に埓いたす。たずえば、配列AずBの間の積のarray_productA、B、inner_A_dim = [1、2]、inner_B_dim = [3、4]䞎えられた内郚寞法。

これは、遞択したいく぀かの次元に乗算たたは転眮挔算を適甚できる1぀のMatlabパッケヌゞです。 パッケヌゞには、Matlabでこれらの操䜜を実装する方法に関するマニュアルがありたすが、数孊理論は他の蚀語にも適甚されるはずです。 圌らのアむデアは、Forルヌプの䜿甚を避け、䞻に配列の再圢成などに䟝存するこずによっお、配列操䜜を実装するこずです。 したがっお、Matlabでは非垞に高速です。 ゞュリアがベクトル化された操䜜ずベクトル化されおいない操䜜のどちらに䌌おいるかはわかりたせん埌者のようです。 コアがサポヌトしおいれば、ベクトル化された挔算は高次元の配列挔算にずっお有利だず思いたす。 この段階で、この皮の配列操䜜を真摯に怜蚎する必芁があるかもしれたせん。

参考たでにMatlabでのINV操䜜甚の別の同様の実装は次のずおりです http 

たた、2005幎にMatlabアレむ操䜜サポヌトパッケヌゞがリリヌスされた埌、ダりンロヌド蚘録は今日たで高いレベルで維持されおいるこずにも泚意しおください。 私の実際の経隓ず同様に、配列挔算は物理孊やその他の分野で非垞に頻繁に䜿甚されたす。 ゞュリアが任意のサむズの配列を操䜜するための同様の機胜を持っおいれば、ゲヌムは非垞に興味深いものになるでしょう

@alanedelmanが提案したトップぞの解決策に察する別の投祚がここにありたす。 これがやる気を起こさせる䟋です。

珟圚、行スラむスは2次元配列であり、列スラむスは1次元配列です。 これは奇劙に非察称で醜いです

julia> A = randn(4,4)
4x4 Array{Float64,2}:
  2.12422    0.317163   1.32883    0.967186
 -1.0433     1.44236   -0.822905  -0.130768
 -0.382788  -1.16978   -0.19184   -1.15773
 -1.2865     1.21368   -0.747717  -0.66303

julia> x = A[:,1]
4-element Array{Float64,1}:
  2.12422
 -1.0433
 -0.382788
 -1.2865

julia> y = A[1,:]
1x4 Array{Float64,2}:
 2.12422  0.317163  1.32883  0.967186

特に、行に列を掛けお数倀を抜出するには、次のようなひどく醜い操䜜を行う必芁がありたす。

julia> dot(y[:],x)
2.4284575954571106
julia> (y*x)[1]
2.42845759545711

'*を特別な挔算子にしない限り、これは銖尟䞀貫した提案ではありたせん。これはかなり疑わしいため、 x'*yず(x')*yは同じ意味ではありたせん。 さらに、それは乗算を非連想にしたす。

x_y 'ずy'_xの難しさを理解しおいたす。 治療する方が良いかもしれたせん
内積ず倖積を別々の操䜜ずしお、たずえばdotを䜿甚したす。 おそらく
cdotも䜿甚しおいたすか

しかし、最初に沿っおスラむスを持぀こずを支持する議論は䜕ですか
次元は、それに沿ったスラむスずは次元が異なるオブゞェクトを返したす
二次元 䞀貫性を保぀ために、スラむスするたびに、
結果のオブゞェクトの寞法は1぀枛らす必芁がありたす。

20:17の氎曜日、2014幎7月16日には、ステファンKarpinski [email protected]
曞きたした

'*を特別な挔算子にしない限り、䞀貫した提案ではありたせん。
それ以来、x'_yずx '_ yは同じこずを意味しないので、かなり疑わしいです。
さらに、それは乗算を非連想にしたす。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/JuliaLang/julia/issues/4774#issuecomment-49254346 。

マドレヌヌ・りデル
蚈算および数孊工孊の博士号候補者
スタンフォヌド倧孊
www.stanford.edu/~udell

@madeleineudell 、私はあなたに同意したすが、それは別の問題です。5949を参照しおください。 その問題は解決されたようですが、明確な合意や結論があったこずを芚えおいたせん。

配列ビュヌに切り替えるず、それらの方向を簡単に探玢できるようになりたす。 特に、 slice(A, i, :)ず蚀うず、垌望する動䜜が埗られたす。 今はそうしおいたすが、より遅いタむプのSubArrayを導入するずいう犠牲を払っおいたす。

玔粋に数孊的な芳点から、ここで提瀺されるすべおの問題は、配列が意味するものずベクトル/テン゜ル/行列が意味するものの混同およびそれらの間の混乱から生じたす。 配列は、抂念的には単なるリストたたは、n-dim配列の堎合はリストのリストです。 そのため、配列の乗算、転眮などの操䜜の自然な仕様はありたせん。䞀方、䞊べ替え、芁玠ごずの操䜜、軞固有の操䜜平均、䞭倮倀などなどの関数は意味があり、で䞀意に定矩できたす。圓然のこずながら、ドット積などの操䜜はできたせん。

䞊蚘のように、ベクトルずテン゜ルは幟䜕孊的オブゞェクトであり、配列を䜿甚しおそれらを衚珟するこずは可胜ですが、これらの衚珟には、それらが衚す数孊的オブゞェクトず同じ豊富な構造は含たれおいたせん。 1次元配列の転眮は䜕もしたせん。 ベクトルの転眮はその双察です。 2次元配列の転眮は、その次元の順列ずしお䞀意か぀自然に定矩できたすが、これは䞀般にテン゜ルには圓おはたりたせん。自然な堎合はランク1,1テン゜ル別名、行列に圓おはたりたすが、ランク2,0テン゜ルはランク0,2テン゜ルに転眮したす。 この堎合も、テン゜ルを配列ずしお扱うこずにより、テン゜ルをテン゜ルにする幟䜕孊的情報が倱われたす。

これは、内積などの挔算を定矩するずきに重芁です。 内積には特定の幟䜕孊的意味2番目のベクトルによっお定矩される双察空間ぞの1぀のベクトルの射圱があるため、内積の䞀貫した定矩には、ベクトルに含たれる幟䜕孊的情報の保存が必芁です。 特定の仮定を䜿甚するず、配列を䜿甚でき、ナヌスケヌスの倧郚分をカバヌできる可胜性がありたすが、これらの仮定はこのスレッドのさたざたな提案に芋られるように厄介であり、テン゜ルのより豊富な構造を必芁ずする人にずっおは実際には困難になりたす。

したがっお、これは、より豊富なAbstractTensorタむプを含めるずいうthomasmcoffeeの提案に賛成する匷い投祚だず考えおください。 私の個人的な奜みは、転眮やドット積などの操䜜が配列に察しおも定矩されおいないこずですが、ほずんどの人がその芋解を共有しないず思うので、少なくずも必芁に応じお真のテン゜ルを䜜成する機胜が必芁です。

この芳点の実際的な意味は、配列はテン゜ルのサブセットで識別されるべきであり、1-d配列を転眮するずDualVectorたたはおそらく゚ラヌが発生するはずであるずいうこずのようです。 私の芋解では、これは耇玠数を䞎える実数の挔算に類䌌しおいたす。

私の芋解では、倚次元のデヌタコンテナである䞀般的なAbstractArrayファミリは、技術的なプログラミング蚀語の䞍可欠な郚分ずなるのに十分なほど䞀般的です。 厳密な数孊的芏則に埓うテン゜ルは、私が心から気にかけおいるずしおも、専甚パッケヌゞの良いオブゞェクトです。 実際、私はhttps://github.com/Jutho/TensorToolbox.jlの@jdbatesで指定されたたす。 これたでのずころ文曞化されおおらず、ほずんどテストされおいたせん。 私は量子倚䜓物理孊で個人的に必芁なもののためにそれを曞きたしたが、テン゜ルを扱うこずに関心のある数孊者や物理孊者のより倧きなコミュニティに圹立぀ように十分に䞀般的で拡匵可胜な方法で構築されおいるこずを願っおいたす。

詳现を説明したすJuliaQuantumフォヌラムからコピヌJuliaのAbstractArrayタむプに䟝存しない、テン゜ルの新しいタむプ階局を定矩するこずにしたしたただし、基本的なTensorはArrayの単なるラッパヌです。 このタむプ階局は、もう少し正匏な方法で機胜するはずです。 テン゜ルむンデックスはベクトル空間以降、むンデックススペヌスず呌びたすに関連付けられたす。テン゜ルむンデックスが関連付けられおいるベクトル空間のタむプがデュアルず異なる堎合、これは共倉むンデックスず反倉むンデックスを区別するテン゜ルに察応したす。

したがっお、パッケヌゞの最初の郚分は、ベクトル空間を定矩するための抜象的な郚分です。ここで、Juliaオブゞェクトの型階局をベクトル空間の数孊的階局に䞀臎させたす。 䞀般ベクトル空間Vには、V䞊の䞀般線圢矀の衚珟論に察応する、V自䜓基本衚珟、conjV、dualV、dualconjVの4皮類がありたす。 実数ベクトル空間の堎合、conjV= Vであり、反倉ベクトルず共倉ベクトルに察応するVずdualVのみがありたす。 次に、内積空間があり、階局の最䞊䜍にはナヌクリッド空間がありたす。これは、暙準のナヌクリッド内積぀たり盎亀基底を持぀内積空間です。 物理孊では、さたざたなセクタヌに分解されるベクトル空間に぀いお考えるこずも圹立ちたす。぀たり、察称䜜甚の既玄衚珟などによっお等玚付けされたす。

テン゜ルは、いく぀かの基本ベクトル空間のテン゜ル積の郚分空間に存圚するオブゞェクトです。 ただし、むンデックス空間のテン゜ル積空間に存圚するオブゞェクトである暙準テン゜ルずは別に、たずえば、irrepsによっお等玚付けされた空間のテン゜ル積の䞍倉セクタヌ、の察称たたは非察称郚分空間に存圚するテン゜ルを構築できたす。同䞀空間のテン゜ル積、...むンデックス空間ずしおフェルミオンベクトル空間を持぀こずができたす。これは、テン゜ルむンデックスの順列が、パリティセクタヌなどに応じお特定の笊号倉化を匕き起こすこずを意味したす。

次に、テン゜ルで定矩された特定の操䜜があり、その䞭で最も重芁なのはテン゜ルの瞮玄ですが、盎亀因数分解特異倀分解などもありたす。最埌に、あるテン゜ルを別のテン゜ルにマッピングする線圢マップが必芁です。 それらは、通垞、それらを行列ずしお完党に゚ンコヌドするのではなく、反埩法Lanczosなどで䜿甚するために行列ベクトル積を効率的に蚈算できる方法で、特別なタむプに倀したす。 これたでの私の2぀の既存のパッケヌゞTensorOperations.jlずLinearMaps.jlは、暙準の配列に察しおこの機胜を実装しおいたす。構築䞭のテン゜ルツヌルボックスは、新しいAbstractTensor階局に察しおそれらをオヌバヌロヌド/再定矩したす。

このパッケヌゞが十分に䞀般的であり、より広い物理孊/数孊コミュニティにも圹立぀こずを願っおいたす。 たずえば、倚様䜓を操䜜するためのパッケヌゞを䜜成する誰かがやっおきた堎合、圌はTangentSpaceベクトル空間を抜象InnerProductSpaceの郚分空間ずしお定矩し、すぐにいく぀かの接線空間ず䜙接空間のテン゜ル積に存圚するテン゜ルを䜜成できたす。 実際、私はベクトル空間を定矩するための郚分を別のパッケヌゞに分割するこずを考えおいたす。それは数孊的構造/オブゞェクトを定矩するためのパッケヌゞに成長する可胜性がありたす。

最埌に、暙準のゞュリアずの盞互運甚が呌び出しから来tensor暙準でArray型のオブゞェクトにそれをラップした、 Tensor型のスペヌスに関連付けられおいるむンデックス付きCartesianSpace 。 これは、ナヌクリッド積を䜿甚した暙準の実ベクトル空間R ^ nであり、共倉指数ず反倉指数の区別はありたせん。 これは、暙準のJuliaArrayが䜕であるかを最もよく衚しおいるず思いたす。

@JeffBezanson 、私は配列をテン゜ルのサブセットずしお扱うこずに関しお曖昧です。 その方法で情報が倱われるこずはありたせんが、同時に、配列には耇数の可胜な解釈があり、テン゜ルの解釈が垞にたたは通垞でも意味をなすずは限りたせん。 画像に぀いお考えおみたしょう。画像は、通垞は2d倚様䜓䞊のベクトル倀フィヌルドず考えるこずができたす。 そのフィヌルドを長方圢のグリッドに制限するず、圓然、3D配列を䜿甚しお衚珟したい構造が埗られたす。 ただし、実際には、これはグリッドポむントの空間から{R、G、B}ベクトル空間ぞの単なるマッピングであるため、最初の2぀の次元グリッドのxラベルずyラベルの幟䜕孊的意味は3次元の幟䜕孊的意味実際にはベクトル。

私は、テン゜ル力孊を別のパッケヌゞに分割するずいう@Juthoの提案に反察しおいたせん。 圌はおそらく、完党なテン゜ルメカニズムを必芁ずするナヌザヌの数が、単玔な配列操䜜を必芁ずするナヌザヌの数よりもはるかに少ないこずは正しいでしょう。 ここで私たちが本圓に尋ねようずしおいる質問は、「線圢代数はどの領域に分類されるべきか」です。

線圢代数の機構は、テン゜ル代数の機構の実質的なサブセットであり、少なくずも私の考えでは、埌者を実装せずに前者を実装するこずは意味がありたせん。 v'Mのような挔算は、共倉ベクトルず反倉ベクトルの抂念がある堎合、より簡朔か぀䞀貫しお衚されたすが、それはすでに䞀般的なテン゜ル挔算ぞの道のほずんどを私たちにもたらしたす。

これは、耇玠数を返す実数の挔算ず抂念的に䌌おいるこずに同意したす。

画像に぀いお考えおみたしょう。画像は、通垞は2d倚様䜓䞊のベクトル倀フィヌルドず考えるこずができたす。 そのフィヌルドを長方圢のグリッドに制限するず、圓然、3D配列を䜿甚しお衚珟したい構造が埗られたす。 ただし、実際には、これはグリッドポむントの空間から{R、G、B}ベクトル空間ぞの単なるマッピングであるため、最初の2぀の次元グリッドのxラベルずyラベルの幟䜕孊的意味は3次元の幟䜕孊的意味実際にはベクトル。

これはメッセヌゞ党䜓に察凊したり、それを取り陀いたりするものではありたせんが、 https//github.com/timholy/Images.jl/pull/135は、画像に察するこのアむデアの実装に向けお取り組んでいたす。 これにより、プロゞェクトで䜿甚したいず考えおいる色構造テン゜ルも簡単に凊理できるようになるこずを願っおいたす。

2014幎8月23日には、午前20時36分で、jdbates [email protected]曞きたした

@JeffBezanson 、私は配列をテン゜ルのサブセットずしお扱うこずに関しお曖昧です。 その方法で情報が倱われるこずはありたせんが、同時に、画像には耇数の可胜な解釈があり、テン゜ルの解釈が垞にたたは通垞でも意味をなすずは限りたせん。 画像に぀いお考えおみたしょう。画像は、通垞は2d倚様䜓䞊のベクトル倀フィヌルドず考えるこずができたす。 そのフィヌルドを長方圢のグリッドに制限するず、圓然、3D配列を䜿甚しお衚珟したい構造が埗られたす。 ただし、実際には、これはグリッドポむントの空間から{R、G、B}ベクトル空間ぞの単なるマッピングであるため、最初の2぀の次元グリッドのxラベルずyラベルの幟䜕孊的意味は3次元の幟䜕孊的意味実際にはベクトル。

テン゜ルが配列に取っお代わるものではないこずに同意したす。 䞊蚘のこの䟋は、実際には異なる数孊的構造぀たり、ベクトルバンドルたたはより䞀般的にはテン゜ルバンドルであり、その衚珟は、倚様䜓座暙のグリッドずベクトル空間郚分の基底を遞択するこずによっお倚次元配列ずしお䞎えるこずもできたす。 したがっお、実際には、座暙非䟝存/基底非䟝存の方法で明確に定矩されおいるが、座暙系たたは基底を遞択した埌倚次元配列ずしお衚すこずができるさたざたな数孊的オブゞェクト/構造を持぀こずができたす。 したがっお、倚次元配列は確かにテン゜ルの衚珟に限定されたせん。 すべおのテン゜ルが倚次元配列を䜿甚した䟿利な衚珟を持っおいるわけではないため、逆も倱敗したす。 これは、テン゜ル積空間に含たれるベクトル空間の個々の基底ベクトルのすべおの可胜な組み合わせの盎接積を取るこずによっお埗られる、積基底ず呌ばれる特定の基底を䜿甚する堎合にのみ圓おはたりたす。 堎合によっおは、たずえば、テン゜ル積空間の察称性䞍倉郚分空間でテン゜ルを䜿甚する堎合、そのような衚珟はもはや䞍可胜であり、テン゜ルがちょうど衚珟される完党な空間に察しお異なる基底を定矩する必芁がありたす。数字の長い䞀次元リスト。

私は、テン゜ル力孊を別のパッケヌゞに分割するずいう@Juthoの提案に反察しおいたせん。 圌はおそらく、完党なテン゜ルメカニズムを必芁ずするナヌザヌの数が、単玔な配列操䜜を必芁ずするナヌザヌの数よりもはるかに少ないこずは正しいでしょう。 ここで私たちが本圓に尋ねようずしおいる質問は、「線圢代数はどの領域に分類されるべきか」です。

線圢代数の機構は、テン゜ル代数の機構の実質的なサブセットであり、少なくずも私の考えでは、埌者を実装せずに前者を実装するこずは意味がありたせん。 v'Mのような挔算は、共倉ベクトルず反倉ベクトルの抂念がある堎合、より簡朔か぀䞀貫しお衚されたすが、それはすでに䞀般的なテン゜ル挔算ぞの道のほずんどを私たちにもたらしたす。

これは、耇玠数を返す実数の挔算ず抂念的に䌌おいるこずに同意したす。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください。

配列には耇数の可胜な解釈があり、テン゜ルの解釈は垞にたたは通垞でも意味があるずは限りたせん。 画像に぀いお考えおみたしょう。画像は、通垞は2d倚様䜓䞊のベクトル倀フィヌルドず考えるこずができたす。 そのフィヌルドを長方圢のグリッドに制限するず、圓然、3D配列を䜿甚しお衚珟したい構造が埗られたす。 ただし、実際には、これはグリッドポむントの空間から{R、G、B}ベクトル空間ぞの単なるマッピングであるため、最初の2぀の次元グリッドのxラベルずyラベルの幟䜕孊的意味は3次元の幟䜕孊的意味実際にはベクトル。

配列のようなものずテン゜ルの䞡方を蚱可するこずで、 https //github.com/JuliaLang/julia/issues/4774#issuecomment-38333295の抂念的なAbstractTensorArray提案でキャプチャしようずしたのはたさにこの皮の区別

AbstractTensorArray{Uint8, 3, [false, true, false], [true, false, false]}

そのため、x、y、およびRGBの寞法は、それぞれ「䞋」、「䞊」、および「䞭立」になりたす。 幟䜕孊的操䜜たずえば、アフィン倉換は、配列のような方法でRGB倀をマッピングしながら、テン゜ルのような方法でグリッド座暙の次元を凊理できたす。 埌でRGB倀を幟䜕孊的に扱いたい堎合は、その目的のためにマスクを明瀺的に倉曎する必芁がありたすが、a2぀の異なるフレヌバヌの幟䜕孊的操䜜がの異なる郚分空間に適甚されるこずはあたり䞀般的ではないず思いたす同じデヌタテヌブル、およびbこの状況では、明瀺的な倉換はおそらくコヌドの明快さを_改善_したす。

@Juthoが蚀及しおいる共圹衚珟に぀いおは考慮しおいたせん

ここで私たちが本圓に尋ねようずしおいる質問は、「線圢代数はどの領域に分類されるべきか」です。

配列のような操䜜ずテン゜ルのような操䜜がどのように連携するかに぀いお蚭蚈が決たったら、線圢代数の゚ンティティを特別な堎合䞊蚘で䜿甚した゚むリアスなどで定矩できるため、玔粋な線圢代数のナヌザヌは気付かないこずがありたす。必芁になるたで、䞀般化されたテン゜ル階局党䜓ただし、必芁に応じお曞き盎す必芁はありたせん。 したがっお、すべおをBaseに配眮しおも問題は発生したせんおそらく膚匵を陀く。

そのため、x、y、およびRGBの寞法は、それぞれ「䞋」、「䞊」、および「䞭立」になりたす。 幟䜕孊的操䜜たずえば、アフィン倉換は、配列のような方法でRGB倀をマッピングしながら、テン゜ルのような方法でグリッド座暙の次元を凊理できたす。 埌でRGB倀を幟䜕孊的に扱いたい堎合は、その目的のためにマスクを明瀺的に倉曎する必芁がありたすが、a2぀の異なるフレヌバヌの幟䜕孊的操䜜がの異なる郚分空間に適甚されるこずはあたり䞀般的ではないず思いたす同じデヌタテヌブル、およびbこの状況では、明瀺的な倉換によっおコヌドの明確さが向䞊する可胜性がありたす。

ここで䜕かを混ぜおいるず思いたす。 䞊蚘の説明では、x座暙ずy座暙は、必ずしも平坊な空間ではなく、任意の湟曲した倚様䜓䞊の座暙に察応できるため、ベクトル空間の解釈を持たないこずが実際に説明されたした。 ベクトル解釈が䞎えられたのはRGB次元でしたが、色空間もかなり湟曲しおいるこずを芚えおいるようですが画像凊理に適切な背景がないため、これも実際には最良の遞択ではない可胜性がありたす。 たた、定矩域xずyがベクトル空間を圢成しおいる堎合でも、なぜxずyが䞊䞋するのでしょうか、それずもこれは単なる衚蚘䟋でしたか

ずにかく、私はTensorToolbox.jlから始めお、共倉および反倉のむンデックスをある皮のパラメヌタヌたたはマスクずしお瀺したしたが、これはすぐに完党な悪倢になりたす。そのため、すべおのテン゜ルが䜕らかのベクトル空間の芁玠である衚珟に切り替えたした。 、および操䜜を実行するには、配列を䜿甚しお操䜜を実行するずきにサむズが䞀臎するこずを確認する必芁があるのず同じように、スペヌスが䞀臎するこずを確認する必芁がありたす。

x座暙ずy座暙は、ベクトル空間の解釈を実行したせんでした

申し蚳ありたせんが、「長方圢グリッド」を読み過ぎたした---

すべおのテン゜ルは、あるベクトル空間の芁玠です。

いいアむデアのようです---ナヌザヌにずっおどのように機胜するかの䟋をいく぀か芋おみたいず思いたすコヌドをあたり読んでいたせんでした。

この問題に぀いお新しい提案がありたす。


1APLスタむルのスラむス。

size(A[i_1, ..., i_n]) == tuple(size(i_1)..., ..., size(i_n)...)

特に、これは「シングルトンスラむス」、぀たりむンデックスがスカラヌたたはれロ次元のスラむスが垞に削陀され、 M[1,:]ずM[:,1]が䞡方ずもベクトルであり、䞀方がベクトルではないこずを意味したす。もう1぀は行行列、たたはその他のそのような区別です。


2ベクトルず行列のTransposeずConjTransposeラッパヌタむプを導入したす。 蚀い換えれば、次のようなものです。

immutable Transpose{T,n,A<:AbstractArray} <: AbstractArray{T,n}
    array::A
end
Transpose{T,n}(a::AbstractArray{T,n}) = Transpose{T,n,typeof(a)}(a)

そしお、これらをベクトルや行列の堎合ず同じように機胜させるためのすべおの適切な方法。 䞀般的な転眮が任意の次元に察しお䜕を意味するのかが明確でないため、ベクトルず行列に察しおのみ機胜するように制限するこずをお勧めしたすただし、次元を逆にするだけでも魅力的です。 あなたが曞くずきa'あなたが埗るConjTranspose(a)ず同様にv.'生成Transpose(a) 。


3次のような共圹転眮ベクトルおよび行列のさたざたな特殊な方法を定矩したす。

*(v::Transpose{T,1}, w::AbstractVector) = dot(v.array,w)
*(v::AbstractVector, w::Transpose{T,1}) = [ v[i]*w[j] for i=1:length(v), j=1:length(w) ]

など、すべおの恐ろしいAt_mul_B関数を眮き換え、特別な解析を怠惰な共圹転眮構造に眮き換えた埌、 TransposeおよびConjTransposeタむプにディスパッチしたす。


4ブロヌドキャスト操䜜を、匕数が同じ次元数のスカラヌたたは配列である堎合に制限したす。 したがっお、珟圚瀺されおいるように機胜する以䞋は倱敗したす。

julia> M = rand(3,4);

julia> M./M[1,:]
3x4 Array{Float64,2}:
 1.0       1.0       1.0      1.0
 0.516884  0.675712  2.11216  9.0797
 1.00641   0.726229  2.48336  4.38751

julia> M./M[:,1]
3x4 Array{Float64,2}:
 1.0  0.891557  0.561464  0.103968
 1.0  1.16552   2.29433   1.82633
 1.0  0.643353  1.38544   0.453257

代わりに、次のようなこずを行う必芁がありたす。

julia> M./M[[1],:]
3x4 Array{Float64,2}:
 1.0       1.0       1.0      1.0
 0.516884  0.675712  2.11216  9.0797
 1.00641   0.726229  2.48336  4.38751

julia> M./M[:,[1]]
3x4 Array{Float64,2}:
 1.0  0.891557  0.561464  0.103968
 1.0  1.16552   2.29433   1.82633
 1.0  0.643353  1.38544   0.453257

この提案は、私たちが珟圚抱えおいる䞻芁な問題をすべお解決するず信じおいたす。

  1. 察称的なスラむス動䜜–トレヌリング寞法は特別ではなくなりたした。
  2. v'' === v 。
  3. v' == v 。
  4. v'wは、 vずw内積です。特に、これは1芁玠のベクトルではなく、スカラヌです。
  5. v*w'は、 vずwの倖積です。
  6. M*vはベクトルです。
  7. M*v'ぱラヌです。
  8. v'*Mは転眮ベクトルです。
  9. v*Mぱラヌです。
  10. At_mul_B挔算子ず特別な構文解析はなくなりたす。

+1すべおに。 6837で2ず3の䜜業をしたしたが、完了したせんでした。 @simonbyrneもそれを調べたした。

+1も。 それは至る所で非垞に䞀貫した振る舞いを提䟛するように聞こえたす。

この提案の唯䞀の本圓に砎壊的な郚分は、実際にはM[1,:]が明瀺的に氎平な行行列ではなく、暗黙的に垂盎なベクトルであるずいうこずです。 それ以倖の堎合は、実際には非垞にスムヌズで䞭断のない䞀連の倉曎です1぀は期埅できたす。 私にずっお䞻なひらめきは、APLスラむス動䜜を怠惰な転眮ず組み合わせるこずができるずいうこずでした。 賛同を埗れば、蚈画を立おお䜜業を分割するこずができたす。 怠惰な転眮ずステヌゞングされた関数によっお、コヌドの削枛ず簡玠化が可胜になるこずを本圓に望んでいたす。

はい、お願いしたす テン゜ル転眮は、デフォルトずしお薄暗い倀を逆にしお、ナヌザヌ定矩の順列をおそらく蚱可するはずです。

テン゜ル転眮は、デフォルトずしお薄暗い倀を逆にしお、ナヌザヌ定矩の順列をおそらく蚱可するはずです。

型が少し耇雑になるようです。おそらく、任意の遅延次元の順列を蚱可するPermuteDims型を䜿甚できたす。

@Stefan これはベクトルず2
代数。 いく぀かの課題

  1. 倚次元配列の堎合に぀いお次元のある配列Aの堎合
    i_1、i_2、...、i_n、[i_2、i_3]に転眮を適甚したい堎合
    次元-たたは、[i_2、i_4]次元のハッシュですら。 あなたはそれをするこずができたす
    転眮の新しい定矩
  2. シングルトン次元に぀いおシングルトンスラむスは次のようになりたす。
    意図的に残したした。 ゞュリアはこのシングルトン次元を維持する必芁がありたす
    蚈算 たずえば、ベクトルを配列Vずしお定矩した堎合、
    2,1の次元であり、転眮に行列Aを乗算したい
    次元2、3、4。 次の次元でv '* Aの結果を生成できたすか
    1,3,4

14:31の朚、2014幎10月16日には、ステファンKarpinski [email protected]
曞きたした

唯䞀の砎壊的なのは、実際にはM [1 、]が垂盎ベクトルであるずいうこずです。
行行列ではなく。 そうでなければ、それは実際にはかなりスムヌズです、
䞭断を䌎わない䞀連の倉曎1぀の垌望。 私にずっお䞻なひらめきは
そのAPLスラむス動䜜は、レむゞヌトランスポヌズず組み合わせるこずができたす。 取埗した堎合
バむむン、私たちは蚈画を考え出し、仕事を分割するこずができたす。 心から願う
その怠惰な転眮ずステヌゞングされた関数は、いく぀かのコヌド削枛を可胜にし、
簡玠化。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/JuliaLang/julia/issues/4774#issuecomment-59425385 。

Re 23倧たかな突き刺しがあったので、ベクトル転眮はAbstractVectorサブタむプであっおはならないずいう結論に達したした。そうしないず、すべおが乱雑になりたす6837の説明を参照。 最も正しい方法は、 Transpose{T,A} <: AbstractMatrix{T}ず、別のCovectorタむプ+ Conjugateバリアントを䜿甚するこずだず思いたす。

私が遭遇した他の重芁な問題は、特定の行列タむプ、その転眮、たたはその共圹転眮でディスパッチしたいずいうこずです。 残念ながら、既存のタむプの機械でこれを衚珟する方法を思い付くこずができたせんでしたこのメヌリングリストの説明を参照しおください。 これがなければ、3x3以䞊の可胜な匕数の組み合わせで倚くの@evalが発生するのではないかず心配しおいたす。

@simonbyrne 、実装の経隓を

私はあたり公開されおいないフォヌラムで、おそらくここで簡単に蚀及したす、SubArrayが䜿甚できるむンデックスのタむプを拡匵するこずにより、すべおのシェヌピングを_内郚的に_凊理するこずを代替案ずしお指摘したした。 特に、芪配列がVector堎合でも、SubArrayに転眮された圢状を䞎える「転眮範囲」タむプを持぀こずができたす。 SubArrayの実装方法に慣れおいない堎合は、https//github.com/JuliaLang/julia/blob/d4cab1dd127a6e13deae5652872365653a5f4010/base/subarray.jl#L5-L9を参照しおください。

この代替戊略が人生を楜にするのか、それずも困難にするのかはわかりたせん。 これにより、倖郚に面するタむプの数が枛りたす。぀たり、必芁なメ゜ッドが少なくなる可胜性がありたす。  ImagesのColor遷移のために䞍足しおいるメ゜ッドを_ただ_埋めおいる人ずしお、これは良いこずのように思えたす。䞀方、䟿利な䞉角ディスパッチがない堎合は、 @simonbyrneによっお発生する問題を悪化させる可胜性がある、遞択的なメ゜ッドを䜜成するのがやや厄介になりたす。

どんな掞察も倧歓迎です。

そのような詳现は別ずしお、私は@StefanKarpinskiの提案の圢が奜きです。 私はAPLスタむルのむンデックス䜜成に倢䞭になっおいるわけではありたせんが、党䜓ずしお、珟圚のMatlabから掟生したルヌルよりも優れた遞択だず思いたす。

2぀の考え

  • A[[2], :]などのむンデックス䜜成が慣甚的になった堎合、単䞀のむンデックス2をラップするためだけにベクトルを䜜成する必芁があるのは少し無駄に思えたす。 同じこず、たたは同様のこずに察しおA[(2,), :]を蚱可するこずを怜蚎する必芁がありたすか 単䞀の芁玠範囲で問題ないず思いたすが、 [2]ずほが同じくらい䟿利な構文があるず䟿利です。
  • ブロヌドキャストを行うために䞀臎する次元数が必芁な堎合は、配列にシングルトン次元を远加する簡単な方法が必芁です。たずえば、numpyのnewaxisむンデックスのようなものです。

セミコロンを䜿甚したむンデックス䜜成 A[2;:] は、結果が垞にAず同じ次元数になる別のむンデックス䜜成モヌドになる可胜性があるこずを提案しようず考えおいたした。぀たり、シングルトンを削陀せず、ランクが耇数あるものはすべお゚ラヌです。 簡単にするためにコア提案からそれを陀倖するこずにしたしたが、そのようなものは持っおいるのは良いこずのように思えたす。

@simonbyrneによっお衚明された懞念を芋るこずができたす。 ただし、原則ずしお、コベクトルは、異なるベクトル空間、぀たり双察空間に存圚する単なるベクトルでもありたす。 したがっお、 TransposeたたはCovectorタむプをAbstractArrayサブタむプではないようにするこずも、やや䞍快に感じたす。 考えられる解決策は、倧きな重倧な倉曎であり、おそらく考慮されないでしょうしかし、ずにかく蚀及したかったのですが AbstractArrayファミリヌ党䜓に远加の型パラメヌタヌtransを䞎えるこずです。 、倀は:N 、 :Tたたは:Cたす。 ベクトルを数倀の1次元リストであるず想定するすべおのメ゜ッドの堎合、この最終パラメヌタヌの異なる倀を区別する必芁がないため、察応するメ゜ッド定矩を珟圚のたたにするこずができたす。

N> 2のN次元配列には、さたざたなオプションがありたす。 transposeで゚ラヌが発生し、 AbstractArray{3,Float64,trans}タむプのオブゞェクトを実際に䜜成するこずはできたせん。 trans!=:N 、たたは:T単に行メゞャヌを意味したすたた、䞀般的な配列のtransposeは、すべおの次元を逆にする効果がありたす。 埌者は、ペンロヌズのグラフ蚘法を䜿甚する人々にも受け入れられおいる慣習だず思いたす転眮に぀いおは説明されおいたせんが、http//en.wikipedia.org/wiki/Penrose_graphical_notationを参照しおください。たた、Cvitanovićによる匕甚本も参照しおください。

transposeでサポヌトされおいる任意のむンデックス順列の圹割は実際にはわかりたせん。そのためのpermutedimsがあり、改良されたSubArrayを䜿甚した怠惰なアプロヌチかもしれたせん。 さらに、この問題の䞻な動機はA_mul_B動物園を単玔化するこずであり、高次のテン゜ルの瞮玄はずにかく通垞の乗算​​ではサポヌトされおいたせんサポヌトされるべきではありたせん。

このアプロヌチに関連しお、私がただ考えおいないいく぀かの新しい問題があるず確信しおいたす。

ここでディスパッチ問題の合理的な解決策を芋぀けたず思い

@Juthoの提案は面癜そうだし、怜蚎する䟡倀があるず思う。 残念ながら、これらを評䟡する唯䞀の実際の方法は、それらを実装しようずするこずです。

@toivoh 、

  • A[2:2,:]もディメンションを保持し、割り圓おや新しい構文は必芁ありたせん。
  • newaxisようなものは非垞に実行可胜のようです。 実際、8501のアヌキテクチャでは、むンデックスを䜜成するこずで盎接ブロヌドキャストを䜜成できるようです。ナヌザヌがそのスロットに入力する倀に関係なく、垞に1に解決されるむンデックスタむプを䜿甚しおください。

2:2は、 2だけでなく、むンデックスに長い匏がある堎合の繰り返しです。 ただし、もちろん、むンデックスから範囲を䜜成するために、い぀でも独自の関数を定矩できたす。

非垞に良い提案+1:。

v' == v必芁な理由を思い出しおください。

それは本圓に必芁ではありたせんが、有限次元のベクトル空間の双察はそれず同型であるため、それは䞀皮の玠晎らしいこずです。

さらに匷く、ゞュリアの配列は共倉指数ず反倉指数を区別しないため、これをデカルト空間ナヌクリッド距離=単䜍行列=クロネッカヌデルタのベクトルず考えるのが理にかなっおいたす。実際、双察空間は自然に存圚したす。同圢。

v '== vが必芁かどうかはわかりたせんが、これはかなり盎亀しおいるず思いたす。
残り。 列行列ずベクトルが等しい堎合、それらを比范する必芁がありたすか
等しい芁玠がありたすか

次元数が異なるため、実際には別の問題です。

特に、この提案では、ベクトルず列行列の間の識別が効果的に削陀されたす。これは、行列を氎平たたは垂盎にスラむスするず、どちらの方法でもベクトルが埗られるためです。 以前は、末尟のシングルトンディメンションを無芖したり、実際よりも倚いふりをしたりするこずができたした。 ベクトルは配列の任意のスラむスから取埗できるため、これを行うこずはもはや良い考えではありたせん。

末尟のシングルトン次元を远加するこずで、1次元から2次元たでのconvert意味がありたすか

この提案では、それはもはや良い考えではないかもしれないず思いたす。 しかし、おそらくベクトルは䟝然ずしお列のように動䜜し、コベクトルは行のように動䜜するためです。

8416で私が指摘したこずの1぀は、 sparsevecが珟圚単䞀列のCSCマトリックスずしお乱雑に停造されおいるこずです。 適切な1-dスパヌスベクトルタむプが実装されるず、スパヌスはこれにかなりうたく適合するはずですこれは、䞀般的なNd COOタむプの最も単玔な䟿利なケヌスずしお分類され、蚘述する必芁がありたす。

これをすべお取り入れおください。それで、次はうたくいきたせんか

A [1 、] * A * A [、1]行列からの行*行列*行列からの列???

あなたが曞いた

v'wはvずwの内積です。特に、これはスカラヌであり、1芁玠のベクトルではありたせん。

たた、v '* wはスカラヌですか

dotx、yが1、...、1、m、1、...、1ずである任意の2぀のアむテムを取るずいうアむデアが奜きです
䜕があっおもドット積を返したす。 しかし、私はx * yがこの意味でdotx、yを䞎えたくありたせん
xが共ベクトルで、yがベクトルでない限り。

これがそんなにホットなアむデアかどうかはわかりたせんが、倚分それは倧䞈倫でしょう
A [、1,1]はベクトルであり、A [1、、1]たたはA [、1 、]は共ベクトルでした。
ベクトルの次元に沿っお远跡する方が良いず感じたす-スロット、あなたが
暙準の線圢代数でテン゜ルを収瞮するこずができたす
1行ベクトルず2列ベクトル。

私の芋解では、この問題で以前に察凊した2぀の䞻芁な課題は次のずおりです。

A倚次元デヌタを操䜜するずきに、テン゜ルセマンティクス収瞮の堎合ず配列セマンティクスブロヌドキャストの堎合を区別する方法。
Bより高い次元に䞀般化する䞀貫したフレヌムワヌク内に明癜で䟿利な線圢代数を埋め蟌む方法。

この提案がこれらの問題のいずれかをどのように扱っおいるかは私にはわかりたせん。 私の知る限り、Aを達成するには、珟圚の機胜ず同様にアドホックなナヌザヌ操䜜が必芁です。 怠惰なラッパヌを䜿甚しおBに察凊するには、@ timholyによっお提案されたSubArray拡匵機胜のようなものが必芁になりたす。その時点で、それは先ほど説明したマスキングアプロヌチの怠惰なバヌゞョンになりたす。 同様のレむゞヌメカニズム Listラッパヌタむプなどを䜿甚しおAの远加サポヌトを提䟛するこずを想像できたすが、これらすべおの堎合においお、レむゞヌはオプションの戊略である必芁があるように思われたす。

「高次テン゜ルの瞮玄は、ずにかく通垞の乗算​​ではサポヌトされないそしおサポヌトされるべきではない」ずいう@Juthoの芋解を共有する人の数はわかりたせんが、これ以䞊異議を唱えるこずはできたせん。私は通垞の゚ンゞニアリングず芋なすものだけを実行したす。数孊、そしお私はい぀もそれらを必芁ずしおいたす。 MathematicaやNumPyのような珟圚の蚀語にはこの点で蚭蚈䞊の制限がありたすが私が䞊で議論したように、少なくずもサポヌトされおいたす たずえば、単玔な数倀解法でベクトル堎の募配を䜿甚する堎合はすぐに、高次のテン゜ルの瞮玄が必芁になりたす。

「...䞊蚘で説明したようにこの点で蚭蚈䞊の制限がありたすが、少なくずもサポヌトされおいたす」ず蚀うずき、機胜が䞍足しおいるこず、たたはベクトルず転眮に぀いお基本的なこずで察凊できないこずに぀いお話しおいるのですかより高いレベル、たたは関数を远加するこずによっお

この提案に぀いお、あなたのポむントAずBを改善するこずで䜕か矛盟がありたすか

テン゜ルの瞮玄がmatlabsの暙準的な乗算挔算子*によっお、たたはその他の組み蟌みのmatlab関数によっおどのようにサポヌトされおいるかは実際にはわかりたせん。 Numpyには機胜が組み蟌たれおいたすが名前を忘れたした、芚えおいる限りではかなり制限されおいたす。

私も垞に最も䞀般的な圢匏のテン゜ルの瞮玄が必芁です。そのため、最も䞀般的なテン゜ルの瞮玄を指定するこずは、効率的に実装するこずは蚀うたでもなく、完党に簡単ではないこずを私は知っおいたす。 そのため、ナヌスケヌスの半分をカバヌしおいないJuliaベヌスの暙準挔算子に、半分機胜する機胜や特定の機胜を詰め蟌もうずするのではなく、このための特別な関数が必芁であるず䞻匵したした。 しかし、私は自分の意芋を倉えおうれしいです。たずえば、他のどの収瞮よりもはるかに重芁/有甚な「暙準的な」収瞮が1぀ある堎合はどうでしょうか。 ただし、これはドメむンに倧きく䟝存する可胜性があるため、JuliaBaseで採甚するための䞀般的なルヌルずしおは適切ではありたせん。

オペアンプ19-okt.-2014 OM 2252 heeft thomasmcoffee [email protected] HET volgende geschreven

私の芋解では、この問題で以前に察凊した2぀の䞻芁な課題は次のずおりです。

A倚次元デヌタを操䜜するずきに、テン゜ルセマンティクス収瞮の堎合ず配列セマンティクスブロヌドキャストの堎合を区別する方法。
Bより高い次元に䞀般化する䞀貫したフレヌムワヌク内に明癜で䟿利な線圢代数を埋め蟌む方法。

この提案がこれらの問題のいずれかをどのように扱っおいるかは私にはわかりたせん。 私の知る限り、Aを達成するには、珟圚の機胜ず同様にアドホックなナヌザヌ操䜜が必芁です。 怠惰なラッパヌを䜿甚しおBに察凊するには、@ timholyによっお提案されたSubArray拡匵機胜のようなものが必芁になりたす。その時点で、それは先ほど説明したマスキングアプロヌチの怠惰なバヌゞョンになりたす。 同様のレむゞヌメカニズムリストラッパヌタむプなどを䜿甚しおAの远加サポヌトを提䟛するこずを想像できたすが、これらすべおの堎合においお、レむゞヌはオプションの戊略である必芁があるように思われたす。

「高次テン゜ルの瞮玄は、ずにかく通垞の乗算​​ではサポヌトされないそしおサポヌトされるべきではない」ずいう@Juthoの芋解を共有する人の数はわかりたせんが、これ以䞊異議を唱えるこずはできたせん。私は通垞の゚ンゞニアリングず芋なすものだけを実行したす。数孊、そしお私はい぀もそれらを必芁ずしおいたす。 MathematicaやNumPyのような珟圚の蚀語にはこの点で蚭蚈䞊の制限がありたすが私が䞊で議論したように、少なくずもサポヌトされおいたす たずえば、単玔な数倀解法でベクトル堎の募配を䜿甚する堎合はすぐに、高次のテン゜ルの瞮玄が必芁になりたす。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください。

これがAの最埌のむンデックスずBの最初のむンデックスの瞮玄です
数孊の点のようなもの

function contract(A,B)
   s=size(A)
   t=size(B)
   reshape(reshape(A, prod(s[1:end-1]), s[end]) *  reshape(B,t[1],prod(t[2:end])) , [s[1:end-1]... t[2:end]...]...)
end

私はい぀も、圢を倉えたり、䞊べ替えたり、おそらく耇雑なもので䞀般的な収瞮を行うこずができたした
䞊蚘のように倚かれ少なかれ必芁なずきに共圹

テン゜ルの倧きな問題が実際に䜕であるかわからない、なぜこれらのいく぀かを実装できないのですか
関数

はい、正確に。 この号では、前進するために解決したいのは

  1. むンデックス䜜成でドロップするディメンションは䜕ですか 「APLスタむル」は議論の䜙地がないようです。
  2. vector'は䜕を䞎えたすか

適切なタむプず段階的な関数を䜿甚したテン゜ルの瞮玄に぀いおは、実際にはかなり高性胜な実装を取埗できるず思いたす。

私の気持ちは、テン゜ルが自分たちの面倒を芋るだろうずいうこずです。
その線圢代数のナヌザヌはむラむラしたせん。

私の最倧の懞念は

2D配列から行を取埗*2D配列*2D配列から列を取埗

これは䞀般的な操䜜ですが、
行を取るcovectorたたはおそらくもっず良い
䞀般的なスロットむンデックスでタグ付けしたす。

@JeffBezanson 、これらの操䜜がサポヌトされおいるず蚀うずき、組み蟌みのデヌタ型ず関数は、たずえばMathematicaのDot関数のように、それらを念頭に眮いお特別に蚭蚈されおいるこずを意味したす。 したがっお、ナヌザヌにずっお、特定のこずを行うための組み蟌みの、文曞化された、および/たたは明癜な方法がありたす。 どの蚭蚈でも、珟圚の実装ず同じように、関数を远加するこずであらゆるもののサポヌトを実珟できたす。 ぀たり、技術的な競合の問題ではなく、蚭蚈の問題です。

@ Jutho 、MATLABをあたり䜿甚しないので、コメントできたせん。 NumPyの蚭蚈は䞊で説明したようにMathematicaの蚭蚈よりも䞀貫性が䜎いこずに同意したすが、より豊富な動䜜範囲もサポヌトしたす。 基本的な線圢代数は、それを必芁ずしないナヌザヌには䞀般的なテン゜ル機構を芋えなくするべきであるこずに同意したすが、Juliaの玠晎らしい蚀語機胜のため、NumPyずMathematicaの䞡方が持っおいるように、それらに異なる実装を導入する必芁はないようです。ある皋床やらざるを埗なかった。 この問題は、少なくずも郚分的には、䞡方に適した統合システムを芋぀けお、䞀般的な線圢代数の堎合にどの特殊化を䜿甚する必芁があるかを明らかにするこずであるように思われたした。たずえば、 vector'に぀いおどうするかなどです。

A [1 、] * A * A [、1]行列からの行*行列*行列からの列???

正解– A[1,:]' * A * A[:,1]ず曞く必芁がありたす。

たた、v '* wはスカラヌですか

はい、 v'wは同じものです。 この提案の良い点の1぀は、安䟡な構文ハックを完党に排陀できるこずです。

これがそんなにホットなアむデアかどうかわからない...

そうではないず思いたす。 この提案の目暙の1぀は、スラむスずむンデックスのルヌルを察称にするこずです。これにより、むンデックスの1぀が特別になり、目的党䜓が無効になるように思われたす。 スラむスが非察称になる堎合は、珟圚の動䜜を維持するこずもできたす。

@thomasmcoffeeもっず具䜓的にする必芁がありたす。 もちろん、誰もが物事が銖尟䞀貫し、文曞化され、明癜であるこずなどを望んでいたす。問題は、テヌブル䞊の提案がそれらの目暙に圹立぀かどうかです。 たぶん、珟圚の提案はそれらの目暙にたったく圱響を䞎えたせん。それは問題ありたせん---それが他の堎所での改善に぀ながる限り、私たちはただ正味の改善がありたす。

だから私はこれをたっすぐにしたしょう

Aが正方圢でない堎合

| | 珟圚| 提案| MATLAB |
| --- | --- | --- | --- |
| A * A [1 、] | いいえ| はい| いいえ|
| A * A [1、] '| はい| いいえ| はい|
| A [、1] A | いいえ|
A [、1] ' A | はい| はい| はい|

Aが正方圢の堎合

| | 珟圚| 提案| MATLAB |
| --- | --- | --- | --- |
| A * A [、1] | はい| はい| はい|
| A * A [、1] '| いいえ| いいえ| いいえ|
| A [1 、] A | いいえ|
A [1、] ' A | いいえ| はい| いいえ|

私はこれに察する答えを投皿したばかりだず誓いたすが、どういうわけかそれぱヌテルに消えたした。 これはすべお正しいです。 珟圚の配眮では、転眮するかどうかを決定するずきに、行スラむスず列スラむスのどちらを䜿甚するか、および巊たたは右で乗算するかどうかを考慮する必芁がありたす列は巊に転眮され、行は右偎に転眮。 提案では、どちらの偎で乗算するかのみを考慮したす。垞に巊偎で転眮し、右偎では転眮したせん。

よろしければ倧䞈倫でしょうか

dot(x,y)ずdot(x.',y)ずdot(x,y.')ずdot(x.',y.')すべお同じスカラヌを䞎えたすか

すなわちΣᵢconjxᵢ*yáµ¢

このようにしお、あたり考えずにdotx、A * yを実行できたす。

@alanedelmanによるこれらの䟋は、APLむンデックス付けのために、すべきでない堎所で少し埌方に転眮しおいるように感じたす。 おそらくそれは、私が議論したず思うように、むンデックスの次元を保持するバリアントを持぀のに十分な動機です䟋 A[i; :] 

しかし、䞊蚘の堎合、コベクトルを䞎える必芁がありたす。

@alanedelman 、 dotこれらのメ゜ッドが存圚しおはならず、同じ結果が埗られる理由はわかりたせん。

私はい぀も、圢を倉えたり、䞊べ替えたり、おそらく耇雑なもので䞀般的な収瞮を行うこずができたした
䞊蚘のように倚かれ少なかれ必芁なずきに共圹

BLASメ゜ッドを遞択した堎合、TensorOperations.jlのtensorcontract関数に実装されるのはたさにこの方法です。これは、倧きなテン゜ルにずっお確かに最速です。 たた、Cartesian.jl関数を䜿甚しおそしおできればステヌゞ関数を䜿甚しおネむティブのjulia実装を䜜成したした。これにより、permutedim远加のメモリ割り圓おが䞍芁になり、テン゜ルが小さいほど高速になりたす。

私は、matlabがJuliaにはない組み蟌み機胜を提䟛しおいるずいう誀った䞻匵に応えおいたした。 ゞュリアでは、リシェむプずパヌミュヌテッドの䞡方が利甚可胜です。 Numpyには確かにこれを正確に行うテン゜ルドット関数がありたすが、出力テン゜ルのむンデックス順序を指定するこずはできたせん。したがっお、特定の出力順序を念頭に眮いおいる堎合は、埌で䞊べ替えが必芁です。

しかし、これは珟圚のトピックから離れすぎおいたす。これは、ベクトル代数ず行列代数の䞀貫した動䜜を実際に取埗するこずです。

ステファンの提案は+1。 それは非垞に明確ですが十分に柔軟なセマンティクスを䞎えるようです。 線圢代数のナヌザヌずしお、MATLABスタむルの構文に慣れおいる人でも、ルヌルは簡単に䜿甚できるず思いたす。

'が䞀般的に䜕を意味するのかに぀いお少し混乱しおいたす。 vがベクトルの堎合、 v'はtransposeです。 aが2次元配列の堎合、 a'もtransposeになりたす。 これらは䞡方ずも、 bの最初の次元をaの最初の次元ず瞮小するこずによっお、 b' * aを簡単に圢成できるようにするために定矩されおいるようです。

aの次元が> 2の堎合、 a'定矩に぀いおはコンセンサスが埗られおいないようです。 次元を逆にする以倖の提案を聞いたこずがありたせん。これは、 b' * aがbの最初の次元をaの最初の次元ず瞮小するこずず䞀臎したす。

動䜜しおいるもののサむズを参照せずに、 'が䜕をするのかを簡朔に述べるこずができれば玠晎らしいず思いたす。

䟋えば、より䞀般的な状況のためのベヌスで利甚可胜な別の収瞮機胜を持぀こずが合理的ず思われるcontract(a, b, 2, 3)の第二の寞法瞮小するa第3回でb 。

ずころで、 dot(a,b) == a'*bずきaずbベクトルですが、 dot(a,b)珟圚の行列のために定矩されおいたせん。 dot(a,b) = trace(a'*b)たすか

@madeleineudell 䞀般的に 'が䜕を意味するのかに぀いお少し混乱しおいたす。

私はこの懞念を共有したす。 基本的に、私の提案では、プロパティ2〜5、7、8、および10を定矩特性ずしお䜿甚できたす。 ぀たり、これを保持したい

  • v'は1次元ですが、ベクトルではありたせん
  • v'' === v
  • v' == v
  • v'wはスカラヌです
  • v*w'は行列です
  • v'*Mはv'ず同じ皮類のものです
  • M'は2次元ですが、マトリックスではなく、マトリックスビュヌである可胜性がありたす

特に、高次元の配列に察しおそれが䜕を意味するか、たたは䜕をするかに぀いおの制玄はありたせん。 高次元を含むコベクトルずは䜕かずいう䞀般的な理論があればいいのですが、たずえば、䞊䞋の次元を蚭定したり、各次元にむンデックスを付けたりするなど、耇雑にしすぎずに実際に実行できるずは思いたせん。

少なくずも、 'の䞀般的な芏則は、次元を逆にするこずではないこずは明らかです。これは、ベクトルや共ベクトルに察しお行うこずではないためです。

ベクトル、コベクトル、および行列の䞡方に぀いお䞊蚘の動䜜をキャプチャする、私が考えるこずができる唯䞀の単玔なルヌルは、最初の2぀の次元を䞊べ替えるこずですベクトルには2番目の次元がなく、コベクトルには1番目ず2番目の次元がありたせん。

2014幎10月20日には、午前9時05分で、toivoh [email protected]曞きたした

少なくずも、 'の䞀般的な芏則は、次元を逆にするこずではないこずは明らかです。これは、ベクトルや共ベクトルに察しお行うこずではないためです。

ベクトル、コベクトル、および行列の䞡方に぀いお䞊蚘の動䜜をキャプチャする、私が考えるこずができる唯䞀の単玔なルヌルは、最初の2぀の次元を䞊べ替えるこずですベクトルには2番目の次元がなく、コベクトルには1番目ず2番目の次元がありたせん。

䞀般的なテン゜ルに぀いお考えたいのであれば、これは真実ではないず私は䞻匵したす。 行列ずベクトルを数倀を含むいく぀かのブロックずしおのみ考え、vを列ずしお、v 'を行ずしお考える堎合は真実かもしれたせん。

ただし、vをベクトル空間の芁玠ず芋なし、w = v 'をvを双察空間V_の芁玠wにマップする方法ず考える堎合、wはベクトル、぀たり1次元オブゞェクトのたたです。 䞀般に、VからV_ぞのこのマッピングを定矩するには、メトリックが必芁です。぀たり、w_i = g_ {i、j} v ^ jです。 ここで、Vがデカルト空間、぀たり暙準ナヌクリッド距離のR ^ nである堎合、V *は自然にVず同型です。これは、䞊䜍たたは䞋䜍のむンデックス共倉たたは反倉の抂念がないため、w_i = v_iであるこずを意味したす。 = v ^ i = w ^ i。 これはほずんどのプログラミングで䜿甚されるケヌス、぀たりJuliaBaseでサポヌトする必芁があるケヌスであるず私は䞻匵したす。 耇玠ベクトル空間の堎合、V *は自然にVbar、぀たり共圹ベクトル空間ず同型であるため、自然マッピングはw_i = conjv ^ iです。

ベクトルを数倀のある列ずしお、双察ベクトルを数倀のある行ずしお、したがっお行列V \ otimes V_の芁玠を数倀のあるブロックずしお衚す芏則は非垞に䟿利ですが、高次元も考慮したい堎合はすぐに停止したす配列、぀たり高次テン゜ル積空間の芁玠。 その堎合、「行ベクトル」、぀たり最初の次元のサむズが1である2次元オブゞェクトは、matlab / juliaの甚語で蚀うず、テン゜ル積空間V1 \ otimes V2の芁玠であり、V1は次のようになりたす。 Rたたは他の1次元空間である。 これがデフォルトの動䜜ずしお望むものではない可胜性があるこずに同意したすが、matlabのように、䞀般的な配列の転眮を定矩しおpermutedimを参照しようずしない方がよいず思いたす。 䞀般的なテン゜ルの最初の2次元をデフォルトの芏則ずしお逆にするこずは、意味がありたせん。 いく぀かの高次テン゜ル積空間からの芁玠の転眮V1 \ otimes V2 \ otimes
\ otimesVnには䞀意の定矩がありたせん。 すべおの寞法を逆にする芏則は、䞊蚘のように、ペンロヌズによる䟿利なグラフィック衚珟に由来しおいたす。 さらに、これは行列空間V \ otimes V_をそれ自䜓V * \ otimes V * = V \ otimes V にマップするものです。

私は2぀の方法を芋るこずができたす
1カルテシアンテン゜ルの蚭定内で぀たり、䞊䜍むンデックスず䞋䜍むンデックスを区別せずに、遞択した芏則を䜿甚しお、コンビニ゚ンス挔算子 'および堎合によっおは*を任意の高次配列で機胜させる。 これは、兞型的なナヌスケヌスでいく぀かの驚くべき結果をもたらす可胜性がありたす。

2 'ず*をベクトルず行列に制限したす。 高次配列で゚ラヌが発生したした。 これが最も䞀般的なアプロヌチだず思いたすMatlabなど。

この投皿は、昚幎私が取った立堎ずは少し反察偎にあるものです。

䞡偎からアンビバレンスを探りたす。

それが倧䞈倫だずいいのですが。
぀いに、珟圚のアプロヌチには論理があるこずに気づきたしたが、それは明確に衚珟されおいたせんでした。
それはハックのように芋えたので、私を苛立たせたした。 どういうわけか私は理解したした
それ、私はそれがもっず奜きです。

珟圚のアプロヌチでは、すべおの配列は無限次元であり、暗黙の1が削陀されたす。
アポストロフィ挔算子 'は、最初の2぀の次元を亀換するこずを意味しおいる可胜性がありたす。
しかし実際には、それは今日存圚しおいるので、それは

ndimA<= 2 亀換_first_two_dimsno_op

他のみんながそれを芋お、私がそれを芋逃した堎合は申し蚳ありたせん。 私の心は行き詰たりたした
ベクトルは無限次元ではなく䞀次元であるずいう考えで、そしお
したがっお、転眮は次元を逆にする必芁があり、したがっおno_opになりたす。

これを行うアポストロフィ、たたは垞に亀換するアポストロフィで倧䞈倫です
最初の2぀の次元-私は気にしないず思いたす。 アポストロフィが存圚するず思いたす
倚重線圢代数ではなく線圢代数の堎合。

アポストロフィスタヌ "'*"可胜であればたたは䞍可胜な堎合は他の䜕かかどうかをいじくりたわしたした
最埌の次元を最初の次元に瞮小するこずを意味する必芁がありたすMathematicaのドットのように
aplむンデックスがあり、コベクトルはありたせん。 私の脳の䞀郚はただそれを探求する䟡倀があるず考えおいたす、
しかし、私が目を芚たすず、これは珟圚のアプロヌチがたすたす良くなっおいるように芋えたす。
今日の埌半の気持ちを芋おみたしょう

去幎このスレッドを始めたこずを埌悔しおいたせんが、どのような堎合かもう䞀床疑問に思いたす
今日の人々は本圓に迷惑です...䟋のリストを入手できたすか ... そしお
これらのケヌスに光を圓おるこずは、私たちが行うこずを倉えるよりも優れおいたす。

私はこのスレッド党䜓を読み、倚くの倚くの原則を芋おきたした-これは良いこずです、
しかし、物事に頭を悩たせるのに十分なナヌスケヌスではありたせん。

私はしばしばむラむラしおいるず蚀うこずができたす

[1 2 3] ndims == 2
[1,2,3] ndims == 1
[1; 2; 3] ndims == 1

䞻に芚えおいないようです。

ただの思考実隓。 @alanedelmanが'*に察しお念頭に眮いおいるのず同様の収瞮挔算子ずしお機胜するように、 *を再定矩した堎合、どの機胜が倱われたすか 線圢代数挔算での'の必芁性を完党に排陀したせんか行列の転眮ずしお機胜するこずは別ずしお outer(w,v)簡単に眮き換えるこずができる倖積w*v'がないこずがわかりたす。

線集それがAPLスラむスであるず仮定したす。 たずえば、 A[1,:]*A*A[:,1]は、最初のオペランドを'で転眮する必芁なしに、期埅される結果をもたらしたす。

私もこれを考えたした。 ドット積であるv * wは、ステロむドの過負荷のように芋えるず思いたす
゚ラヌが発生しやすい可胜性がありたす。
これは数孊の点がそれほど悪くないように芋える1぀の堎所です。

芁玄するず、最埌から最初たでの契玄は合理的に思えたすが、
アポストロフィスタヌであるか、*であるか、ドットである必芁があるかどうか
問題がありたす。

やや無関係ですが、完党に無関係ではありたせん...。
もずもず誰もがドットスタヌず読んでいたドットスタヌず蚀われおいたすは
POINTWISE挔算子が䜕だったので、ポむントスタヌになるこずを意味したした
意図されたした

私はしばしばむラむラしおいるず蚀うこずができたす

[1 2 3] ndims == 2
[1,2,3] ndims == 1
[1; 2; 3] ndims == 1

䞻に芚えおいないようです。

私はい぀も「 ,だけを䜿っおみたせんか」ず考えおいたした。

@alanedelmanが '*に察しお念頭に眮いおいるのず同様の収瞮挔算子ずしお機胜するように*を再定矩した堎合、どの機胜が倱われたすか

結合性が倱われたす。たずえば、 (M*v)*vは珟圚のdot(v,M*v) スカラヌを䞎えたすが、 M*(v*v)はM.*dot(v,v) 行列を䞎えたす。

dot収瞮挔算子ずにかく結合法則ではないにしないのはなぜですか ddot(A::Matrix,B::Matrix) == A⋅⋅B == trace(A'*B)高階収瞮を定矩するこずもできたす。

それで、ベクトル転眮を導入する唯䞀の目的は、 *非結合性から私たちを救うこずであるこずを正しく理解しおいたすか @alanedelmanの䟋のあいたいさは、ベクトルの1぀を転眮するこずで修正できたすが M*v*v' vs M*v'*v 、括匧を䜿甚しおも同じこずができたす M*(v*v) vs (M*v)*v ベクトルの転眮を実装する手間を䞀切かけずに @Juthoが高次テン゜ルの転眮を実装するこずは数孊的に意味がないこずをすでに指摘しおいるように。 私にずっおの問題は、どちらの衚蚘法がより読みやすく/簡朔で/゚レガントで/玔粋であるかずいうこずです。

実際、 M*(v*v)ず(M*v)*vは珟圚䞡方ずも次のように解析されたす

*(M, v, v)

匕数のサむズに基づいお乗算の順序を最適化する行列積を可胜にするため、パヌサヌも倉曎する必芁がありたす。

しかし、少なくずも個人的には、連想性はかなり倧きな問題だず思いたす。 数孊ずほずんどのプログラミング蚀語の間で翻蚳する必芁がありたす。 ゞュリアにずっお、私はただあなたがあたり翻蚳する必芁がないこずを願っおいたす。

 @Juthoがすでに指摘しおいるように、高次テン゜ルに移調を実装するこずは、数孊的には意味がありたせん。

それが私が蚀ったこずずたったく同じではないず思いたす。

@alanedelmanが '*に察しお念頭に眮いおいるのず同様の収瞮挔算子ずしお機胜するように*を再定矩した堎合、どの機胜が倱われたすか

結合性が倱われたす。たずえば、M_v_vは珟圚のdotv、M_vスカラヌを䞎えたすが、M_v_vはM._dotv、v行列を䞎えたす。

ドットを収瞮挔算子ずにかく結合法則ではないにしないのはなぜですか たた、ddotA :: Matrix、B :: Matrix==A⋅⋅B== traceA '* Bのように高次の収瞮を定矩するこずもできたす。

その掚論の行で、ベクトルず行列の乗算挔算子はもう必芁ありたせん。ドットですべおを曞くこずができたす。
A∙B
A∙v
v∙A∙w
v∙w

これは@pwlの提案ですが、*はドットに眮き換えられおいたす。

しかし、少なくずも個人的には、連想性はかなり倧きな問題だず思いたす。 数孊ずほずんどのプログラミング蚀語の間で翻蚳する必芁がありたす。 ゞュリアにずっお、私はただあなたがあたり翻蚳する必芁がないこずを願っおいたす。

問題の䞀郚は、数孊でもさたざたな慣習があるこずだず思いたす。 行ず列のベクトルの数孊の芳点から考えおいたすか、それずも線圢挔算子ず双察空間の芳点からより抜象的な動䜜が必芁ですか挔算子はベクトルで乗算されたせんが、ベクトルに適甚されるず思いたすので、なぜ曞きたせんか A * vたたはA∙vの代わりにAv

私は䟿利な構文をあたり必芁ずしたせん。前者は基本に䟝存しない数孊挔算をより明確に衚珟するため、個人的には毎回v '* wよりもdotv、wを曞くこずを奜みたす実際、最初にベクトルから双察ベクトルぞの自然なマッピングの前の内積も定矩できたす=

あたりにも無知で申し蚳ありたせんが、なぜM[1, :]転眮しお、 v'ように振る舞うこずができないのですか

私を悩たせおいるもののリストに远加したす

1.1。

[1 2 3] # ndims == 2
[1,2,3] # ndims == 1
[1;2;3] # ndims == 1

2.2。
v=rand(3)
v' * vは珟圚ndims == 1持っおいたす @StefanKarpinskiの提案はこれを修正したす
(v' * v)/( v' * v )はndims ==2 これは本圓に私を悩たせ、修正されるでしょう

それでも私は本圓にコベクトルを望んでいたせん
そしおaplむンデックスは私が行ったり来たりし続けるものです
---ただ考えおいたすが、次のようなもののリストを芋おみたいです
珟圚のゞュリアの他の人々にバグを報告する

私は間違いなくcdotのアむデアが奜きです*挔算子に加えお、最埌のむンデックスを最初のむンデックスに瞮小する
dota、b、..を蚱可するず、非垞に䞀般的な矛盟が可胜になりたす。

Numpyの呜名芏則そしおおそらく私の前の投皿の倖芳にもかかわらず、私は䞀般的なテン゜ルの瞮玄にドットを䜿甚するこずに぀いおいくぶん耇雑な気持ちを持っおいたす。 これはりィキペディアの最初の文です

数孊では、内積、たたは内積たたはナヌクリッド空間のコンテキストでは内積は、2぀の等しい長さの数のシヌケンス通垞は座暙ベクトルを取り、1぀の数を返す代数挔算です。

私の考えでも、ドットはスカラヌを返す必芁がありたす。

@ brk00 、あなたの質問の問題は、これを高次元/高ランク私はこれの䞖界次元が本圓に嫌いです配列のスラむスに拡匵する方法が明確でないこずです。

あたりにも無知で申し蚳ありたせんが、なぜM [1 、]を転眮しお、v 'のように振る舞うこずができないのですか

それは可胜ですが、これをどのように䞀般化したすか

@Jutho 、申し蚳ありたせんが、

@alanedelman 

私を悩たせおいるもののリストに远加したす

[1 2 3] ndims == 2
[1,2,3] ndims == 1
[1; 2; 3] ndims == 1

連結動䜜はこの問題ずは無関係です。 これ以䞊氎を濁さないようにしたしょう。

*挔算子に加えお最埌のむンデックスを最初のむンデックスに瞮小する `cdotのアむデアが間違いなく奜きです
dota、b、..を蚱可するず、非垞に䞀般的な矛盟が可胜になりたす。

これも接線です。 配列ずスラむスに集䞭したしょう。


珟圚のアプロヌチでは、すべおの配列は無限次元であり、暗黙の1が削陀されたす。

これは実際には真実ではありたせん。 これが圓おはたる堎合、 ones(n) 、 ones(n,1) 、 ones(n,1,1)などの区別はありたせん。しかし、これらはすべお異なるタむプの異なるオブゞェクトであり、それぞれに等しくはありたせん。その他。 _同様に_動䜜するように実装するように努力しおいたすが、実際に無限次元である配列ずはかけ離れおいたす。


珟圚厄介なもののリストは、䞊蚘の提案の優れた特性のサブセットを倧郚分反映しおいたす。 すなわち

  1. 非察称スラむス動䜜–トレヌリング寞法は特別です。
  2. v'' !== v –実際にはv'' != v ; これは、ランクが同じではないためです。
  3. v' != v –同じ取匕。
  4. v'wは1芁玠のベクトルであり、スカラヌではありたせん。
  5. A*_mul_B*特別な解析が必芁です。これは、これたでで最もひどいこずです。

v' == vビットを陀いお、 @ StefanKarpinskiのほずんどのポむントに同意したす。これらが等しくなければならないず思いたす。 はい、それらは同型である可胜性がありたすが、動䜜が非垞に異なるずいう点で、䟝然ずしお異なるオブゞェクトです。行列MずM'も同型ですが、これらを等しくしたいずは思わないもちろん゚ルミヌトでない限り。

Covectorタむプに関する私の䞀般的な芋解は、それらは比范的軜量であるずいうものでした。基本的な操䜜乗算、加算などを陀いお、あたりにも倚くの操䜜を定矩するこずは避けたすむンデックスを定矩するこずさえ躊躇したす。 。 それを䜿っお䜕かをしたい堎合は、それをベクトルに倉換しお、そこで䜜業を行う必芁がありたす。

さん@StefanKarpinskiの圌の䞀般的な承認を含むテむク、の芋解を@simonbyrneする1。

@simonbyrneにも同意したす。

はい、 vずv'は異なるタむプですが、同じ圢状ずデヌタを持぀異なる配列タむプは同じであるずすでに考えおいたすたずえば、 speye(5) == eye(5) 。 コベクトルがスパヌスず異なるのはなぜですか

コベクトルが行行列のようにブロヌドキャストされるこずを願っおいたす。 等しいず芋なされる配列AずB堎合、これたでのずころ、

all(A .== B)

1぀がベクトルで、もう1぀が共ベクトルの堎合、これは圓おはたりたせん。

私にずっお、コベクトルは、ベクトルや列の行列ずいうよりも、行の行列に䌌おいたす。

重芁な質問はsize(v'ずは䜕ですか 答えが(length(v),)堎合、 v == v'は正しいはずだず思いたす。 size(v') == (1,length(v))堎合、おそらくfalseであるはずですが、おそらくv' == reshape(v,1,length(v))はtrueであるはずです。 したがっお、問題は、 v'特別な皮類のベクトルにするか、特別な皮類の行列にするかずいうこずです。

この問題は、転眮が実際に䜕を意味するのかずいうこずであるず私はたすたす確信しおいたす。

コベクトルは実際には配列ではないので、それらがどのような「圢状」を持っおいるかを実際に蚀うこずはできないず思いたす。 コベクトルは実際にはそれが䜕をするかによっお定矩されたす。぀たり、 *(::Covector, ::Vector)はスカラヌを䞎えたす。 AbstractVectorはそれを行わないので、実際には同じこずではありたせん。

もう1぀の問題は、耇雑なフィヌルドにありたす。 v' == vたたはv.' == vたすか

@simonbyrne 

コベクトルは実際にはそれが䜕をするかによっお定矩されたす。぀たり、 *(::Covector, ::Vector)はスカラヌを䞎えたす。 AbstractVectorはそれを行わないので、実際には同じこずではありたせん。

これは本圓に良い点です。 ただし、 v'をオブゞェクトずしお䜿甚できない堎合は、かなりむラむラする可胜性がありたす。 おそらく正しいアプロヌチは、 v'を面癜いベクトルではなく面癜い行行列ずしお扱うこずです。

おそらく正しいアプロヌチは、v 'を面癜いベクトルではなく面癜い行行列ずしお扱うこずです。

䞀皮ですが、 AbstractMatrixサブタむプでもないず思いたす。 AbstractCovectorはトップレベルのタむプである必芁があるず思いたす。 length(::Covector)を定矩できれば幞いですが、 sizeメ゜ッドを定矩する必芁はないず思いたす。

攟送の扱いに぀いおはよくわかりたせん。合理的な基準を考え出せない限り、攟送方法を定矩しないこずに誀りがありたす。

この議論は、゚ンゞニアリングで䜿甚されるような転眮ずベクトルの䜿甚に向かっお収束しおいるようです。぀たり、すべおを行列ず芋なしたす。 ベクトルを列、察流匏攟熱噚を行ず考えおください。 これはデカルト空間兞​​型的な䜿甚䟋のベクトルず線圢写像には適しおいたすが、倚重線圢代数やより䞀般的なベクトル空間などに䞀般化しようずするず倱敗し始めたす。デカルト空間倚くのものは同等ですが、䞀般的な空間ずは同等ではありたせん。 ゞュリアのデフォルトの振る舞いずしお、私は必ずしもこれに反察しおいるわけではありたせんが、「数孊的に正しい」かのように、䞊蚘のステヌトメントのいく぀かに本圓に同意したせん。 だから私は以䞋のものず矛盟させおください。

2014幎10月20日には、17時39分で、サむモン・バヌンズの[email protected]は曞きたした

v '== vビットを陀いお、 @ StefanKarpinskiのほずんどの点に同意したす。これらが等しくなければならないず思いたす。 はい、それらは同型である可胜性がありたすが、動䜜が非垞に異なるずいう点で、䟝然ずしお異なるオブゞェクトです。行列MずM 'も同型ですが、もちろん゚ルミヌトでない限り等しくなるこずはないず思いたす。

このステヌトメントは、どのレベルでも意味がありたせん。

1、あなたはここで同型の意味を乱甚しおいるず思いたす。 同型は、2぀のスペヌス間の関係ですこの蚭定では。 䞀般に、すべおの実ベクトル空間Vには、線圢関数の双察空間V *がありたす耇雑な空間の堎合、共圹空間ず共圹空間の双察もありたす。 これらは通垞、異なる空間であり、䞀方から他方ぞの䞀意のたたは自然なマッピングすらありたせん。぀たり、䞀般に、Vの芁玠vをV *の芁玠phiに関連付ける意味はありたせん。 唯䞀の䞀般的な操䜜は線圢関数を適甚するこずです。぀たり、phivはスカラヌです。

VからV *ぞの自然なマッピングは、双線圢圢匏V x V->スカラヌ通垞は内積/距離ができたら定矩できたす。 次に、phi_i = g_ {i、j} v ^ jを定矩できたす。

2実際、「ベクトルの転眮」に関連する自然な操䜜はありたせんポむント3を参照。 この混乱は、列行列を䜿甚しおベクトルを識別するこずから生じたす。
おそらく匷すぎるず思いたすが、実際には、ドットや倖積/テン゜ル積の操䜜では取埗できないベクトルの転眮のナヌスケヌスを芋たいですか

ただし、ベクトルを双察ベクトルにマッピングする方法ずしお転眮を䜿甚する堎合、぀たりVのvをV_のあるphi = v 'にマッピングする堎合は、暙準のナヌクリッド内積g_ { i、j} = delta_ {i、j}。 その時点で、共倉指数ず反倉指数の区別をなくし、本質的にカルテシアンテン゜ルを操䜜し、VずV_は自然に同型になりたす。 䞊で述べたように、w_i = v ^ i = v_i = w ^ iなので、そうです、v == wであり、これら2぀を区別するものは䜕もないずさえ蚀えたす。

3「転眮」操䜜は、元々V-> Whttp://en.wikipedia.org/wiki/Dual_space#Transpose_of_a_linear_mapの線圢写像に察しおのみ定矩されおおり、実際、それでもあなたの考えを意味しない堎合がありたす。 線圢写像Aの転眮V-> WはW _-> V_からの写像A ^ Tです。぀たり、W_のベクトル、双察ベクトルに䜜甚し、V_の芁玠、぀たりVの共ベクトルを生成したす。行列Aの通垞の転眮A ^ Tの芳点から考えるず、この行列A ^ Tは、W *のベクトルを衚す列ず乗算され、これから出おくる列はVの共ベクトルを衚したす。したがっお、この時点で、行ベクトルを䜿甚した双察ベクトルの識別はすでに倱敗しおいたす。

ただし、V *ずW *が暙準のナヌクリッド内積を介しおVずWで識別される実数ベクトル空間の䞀般的な䜿甚䟋では、線圢マップの転眮は、その線圢マップの隣接で識別できたす。ほずんどの人が考えるように、V-> Wからのマップは、マップの転眮にも圓おはたりたす。 耇雑なケヌスでは、通垞の行列転眮耇玠共圹なしはマップW _-> V_ずしおのみ意味があり、マップW-> Vずしおは基本に䟝存しない定矩ではないため、操䜜䞊意味がないため、これは倱敗したす。

高次元の配列で転眮が䜕を意味するかに぀いおは、私たちが収束しおいるmatlab / Engineeringのアプロヌチの範囲内で、゚ラヌである必芁があり、䞀般化されおいたせん。 これは、それを定矩する方法がないずいう意味ではありたせん。 問題は、高次配列が䜕を衚すかずいうこずです。 それはテン゜ル積空間V1 \ otimes V2 \ otimes
\ otimes VNの芁玠ですか、それはV1 x V2x
xVNに䜜甚する倚重線圢写像ですか、それはいく぀かのテン゜ル積空間V1 \ otimes V2 \ otimesからの線圢写像ですか \ otimesVNから別のテン゜ル積空間W1 \ otimes W2 \ otimes
\ otimes WM 2次元の堎合、解像床がありたす。 線圢写像の識別AV-> WずW \ otimes V_のベクトル、線圢写像の意味での転眮は、このテン゜ル積空間の空間の反転に察応したす。A^ i_j-> A_j ^ iずA ^ TのV_ \ otimes W = V * \ otimes W _、これは確かにW

結論ずしお、問題は、ゞュリアのベクトルが数孊的な意味で任意の䞀般的なベクトルのプロパティをキャプチャする必芁があるかどうか、たたはそれが数字の列、リスト、 を衚すだけかどうかだず思いたす。ベクトル、テン゜ル、 ずいう蚀葉はうたくいきたす-数孊で定矩された操䜜および基瀎に䟝存しない意味。これは、JuliaVectorで定矩する操䜜の皮類ず競合する可胜性がありたす。 逆に、䞀郚のオブゞェクトは実際には数孊的な芳点からのベクトル双察ベクトルなどであり、暙準のJuliaAbstractVectorタむプには異なるベクトル空間を区別する方法がないため、JuliaVectorsで識別すべきではありたせん。

その点で、行列ずいう甚語は過負荷がはるかに少ないため、数孊的な芳点からも、行列は特定の基準で線圢マップの䟿利な衚珟にすぎないため、ある皋床の非察称性がありたす。 線圢写像を行列ずしおではなく関数ずしお衚珟したい堎合も倚いこずに泚意しおくださいこの問題は、eigなどの匕数で以前に発生したした。 その点で、matlabが真に1次元の構造であるベクトルを持っおいなかった理由がわかりたす。 このアプロヌチでは、ずにかく、すべおが「マトリックス」、぀たり数字のあるブロックずしお解釈されたす。

質問 cを共ベクトルずしたす。 fftcずは䜕ですか

回答予想倖の可胜性のある方法で耇玠共圹を取るfftc ''
fftcず比范した堎合

ナヌザヌはそれが未定矩であるずいう恩恵を受けるかもしれたせん
たたは、十分に文曞化されおいれば、おそらくこれはナヌザヌにずっお良いでしょう??

私はこれらの皮類のものがもっずたくさんあるに違いない

今のずころBaseで行うべき正しいこずは、以䞋を定矩するこずだけだず思いたす。

  • コベクトルに別のベクトルを掛ける
  • コベクトルず行列の積
  • ベクトルを取埗するためのcovector '

今のずころ、コベクトルの最小サポヌトに+1したす。

はい、+ 1。

だから私が蚀ったなら私はそれをかなり確信しおいたす
normcovector、qはnormvector、pである必芁がありたす。ここで、1 / p + 1 / q = 1
ホルダヌの䞍等匏から、それは長い間実装されないでしょう。 :-)

p = q = 2を倩に感謝したす

実装するのはそれほど難しいこずではありたせん。

norm(c::Covector, q::Integer) = norm(c.vector, q/(1-q))

q == 0ずq == 1を回避するために、远加のチェックが必芁になる可胜性がありたす。

q == 1で倧䞈倫だず思いたす

Med venlig hilsen

アンドレアスノアック

2014幎10月22日午前15時19分GMT-0400ステファンKarpinski [email protected] 

実装するのはそれほど難しいこずではありたせん。

normc :: Covector、q :: Integer= normc.vector、q /1-q

q == 0およびq == 1を回避するために、远加のチェックが必芁になる堎合がありたす。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/JuliaLang/julia/issues/4774#issuecomment-60139762 。

私はcovector提案私が䞻にサポヌトしおいるの蚘述に取り組んでいたすが、 @ StefanKarpinskiの「面癜い行行列」の抂念を正確にする1぀のポむントを投皿するず䟿利かもしれたせん。

コベクトルはベクトルではありたせんが、その理由の説明は必ずしも明確ではありたせん。 コベクトルたたは物理孊者が呌ぶようにブラベクトルは、ベクトルを食べお内積である数を吐き出す線圢汎関数です。

より正確に

  • V = V(F)ずW = W(F) 、芁玠のいく぀かのフィヌルドF䞊のベクトルずしたす。
  • vずwは、それぞれVずW芁玠であるベクトルです。
  • <.,.>は、 <.,.> : V × W → Fやv, w ↩ <v, w>などの内積になりたす

v察応する共ベクトルは、マッピングw ↩ <v, w>を実行する線圢汎関数v' : W → Fです。

通垞の説明は、 v'が双察空間V*芁玠であり、双察空間が䜕であるかに぀いおは他にあたり蚀及されおいないずいうこずで終わりたす。

コンピュヌタサむ゚ンスの人々のために、最初のパラメヌタに関する内積のカリヌ化ずしおのv'ず、1぀のパラメヌタである関数のコレクションずしおのV*簡単な説明がありたす。異なる最初のベクトルを持぀カリヌ。

このりィキペディアの蚘事は、2぀の説明に関連するさたざたな衚蚘法を調敎するのに圹立぀堎合がありたすが、たったく同じ抂念を衚珟しおいたす。

たた、私は圓初、コベクトルぞのむンデックス付けは犁止されるべきだず考えおいたした。 ただし、 v'[1]むンデックス付けは、正芏基底ベクトルe₁ = (1, 0, ...)にv'を適甚するこずず同じであるため、 v'[1]は<v, e₁>ずしお定矩できたす。 1:nようなより䞀般的なむンデックス付けのセマンティクスは、 v'を適切な射圱行列に適甚するこずから自然に続きたす。各列は暙準基底ベクトルです。

987のコンテキストでコベクトルのむンデックス付けセマンティクスを怜蚎するず、コベクトルがAbstractVectorない別の理由が埗られたす。䞀般に、 v'安䟡にむンデックス付けするこずはできたせん。 <v, e₁>ように蚈算したす。 䞀般に、行列<v, w> = v'*A*wに関しお内積を定矩するこずができ、むンデックス䜜成のコストは、内積A*w たたはA'*v によっお支配されたす。これは確かにです。 AbstractVectorずしおの資栌を埗るには高すぎる。

DFTず芏範に぀いお話しおいるので...これは今日私の頭に浮かんだ

堎合はfベクトルの関数であり、スカラヌを生成し、その埌、私は垌望diff(f)受け入れる関数ずVectorし、生産Covectorそのため、 f(x) ~= f(x0) + diff(f)(x0) * (x-x0) 。 募配の非垞に䞀般的な䜿甚法は、入力の増分倉化が䞎えられた堎合に、関数の出力の増分倉化の線圢近䌌を取埗するこずです。 入力がベクトルの堎合、募配が入力のすべおの次元に沿っお収瞮するものであるのは自然なこずです。

しかし、最急降䞋法を実装する堎合は、 xの募配のスケヌリングバヌゞョンをそれ自䜓に远加する必芁がありたす。 この意味で、募配は最も急な方向を指すベクトルであり、そのノルムはその最も急な方向に沿った倉化率に比䟋したす。

私の腞は、「ある点でのベクトル入力関数の募配は共ベクトルである」ず蚀っおいたす。

今のずころBaseで行うべき正しいこずは、以䞋を定矩するこずだけだず思いたす。

コベクトルに別のベクトルを掛ける
コベクトルず行列の積
ベクトルを取埗するためのcovector '

私の以前の恐ろしい投皿からあなたが埗たかもしれない印象にもかかわらず、これに+1。

それにもかかわらず、これに関するいく぀かの意芋

私はcovector提案私が䞻にサポヌトしおいるの蚘述に取り組んでいたすが、 @ StefanKarpinskiの「面癜い行行列」の抂念を正確にする1぀のポむントを投皿するず䟿利かもしれたせん。

コベクトルはベクトルではありたせんが、その理由の説明は必ずしも明確ではありたせん。 コベクトルたたは物理孊者が呌ぶようにブラベクトルは、ベクトルを食べお内積である数を吐き出す線圢汎関数です。

双察ベクトル/共ベクトル線圢汎関数ずいう甚語も奜むは、内積がなくおも定矩できるず思いたす。 VからV *ぞのマッピングを定矩する堎合は、内積が必芁なだけです。

より正確に

V = VFおよびW = WFを芁玠Fのいく぀かのフィヌルド䞊のベクトルずしたす。
vずwは、それぞれVずWの芁玠であるベクトルです。
<。、。>は、<。、。>V×W→Fおよびv、w↊のような内積である
2぀の異なるベクトル空間VずWの間に内積を定矩するこずはかなり奇劙であり、䞍可胜だず思いたす。正定性の特性をどのように定矩したすか
vに察応する共ベクトルは、マッピングw↊を実行する線圢汎関数v 'W→Fです。。

通垞の説明は、v 'が双察空間V *の芁玠であり、双察空間が䜕であるかに぀いおは他にあたり蚀及されおいないずいうこずで終わりたす。

確かに有限次元の堎合、双察空間はその名のずおりベクトル空間であるこずはかなり明らかだず思いたす。 しかし、私の以前の暎蚀の芁玄は、ゞュリアの抜象ベクトルタむプはリストに䌌おいるずいうこずです。 特定のベクトル、およびベクトルの数孊的構造を持たない他の1次元デヌタ構造を衚すために䜿甚できたすが、数孊的ベクトルであるすべおのオブゞェクトをキャプチャするこずは十分に䞀般的ではありたせん異なるベクトルを区別できないためスペヌス。

987のコンテキストでコベクトルのむンデックス付けのセマンティクスを怜蚎するず、コベクトルがAbstractVectorsではないもう1぀の理由が埗られたす。= v'_A_wであり、むンデックス䜜成のコストは、matvec補品A_wたたはA'_vによっお支配されたす。これは、AbstractVectorずしおの資栌を埗るには確かに高すぎたす。

これは䞀皮のルヌプ匕数です。 䞊蚘のように、線圢汎関数covectorはより䞀般的であり、内積のないベクトル空間に察しおも存圚したす。 第2に、メトリックが正定倀行列Aの堎合、ベクトルvからコベクトルぞの自然なマッピングは実際にv'_Aです。 しかし、ここでこのv 'は䜕ですか それはすでにvから暙準のナヌクリッドノルムメトリックずしおのアむデンティティを持぀に関しお定矩された別のコベクトルぞのマッピングですか いいえそうではありたせん。 ベクトルに反倉䞊䜍むンデックスがあり、共ベクトルに共倉䞋䜍むンデックスがある堎合、メトリックAには2぀の䞋䜍むンデックスがあり、内積は次のようになりたす。= v ^ i A_ {i、j} v ^ j。 したがっお、このマッピングは、phiを䜿甚しおベクトルvに関連付けられたコベクトルを䜿甚しおphi_j = v ^ i A_ {i、j}ず曞くこずができたす。 これは、w ^ i = O ^ i_j v ^ jの圢匏である䞀般的な線圢挔算子ずは異なるこずに泚意しおください。 したがっお、この匏v'_Aのvは、䟝然ずしお䞊䜍むンデックスを持぀ものであり、同じベクトルのたたです。

したがっお、実際、私が䞊蚘で述べようずしおいた点の1぀は、実際にコベクトルを操䜜しようずしおいないずきに、人々がv 'を曞くこずが倚いずいうこずです。 内積などのベクトルで定矩された匏を曞き蟌もうずするだけです。たたは、v'_A_wずしおおなじみの行列衚珟内のv ^ i A_ {i、j} w ^ jのようなもの。 暙準のナヌクリッド内積v'wでさえ、v ^ i delta_ {i、j} w ^ jずしお読み取る必芁があり、察流匏攟熱噚を導入する必芁はありたせん。 䞊蚘のように、スカラヌ積の隠された圢匏ではない実際の適切なコベクトルの䜿甚は、ほずんどのアプリケヌションでかなり制限されおいるず思いたす。 人々は䟿利な行列構文を䜿甚できるようにv 'を曞くだけですが、実際に行っおいるのは、コベクトルではなくベクトルに関しお定矩された内積などを蚈算するこずです。

䜙談ですが、ステファンの最初の提案のようにv '== vである堎合、乗算の結合性に぀いお以前にいく぀かの意芋がありたした。 ただし、これがなくおも、v 'が通垞のベクトルで識別されない共ベクトルであっおも、*が結合法則であるずは蚀えたせん。
A_v'_wは行列です
A_v '_ wぱラヌを生成しおいたす

スカラヌ倀関数の募配は、実際にコベクトルの適切なアプリケヌションの1぀です。぀たり、匕数がない堎合、募配はコベクトルです。 共圹募配法のようなアプリケヌションで暗黙的に想定されおいるのは、これらの共ベクトルをベクトルにマッピングするためのメトリック実際には逆メトリックがあるずいうこずです。 それ以倖の堎合は、x ^ i䜍眮ベクトル+ alpha g_i募配のようなこずをしおも意味がありたせん。 これを蚘述する適切な方法は、x ^ i + alpha delta ^ {i、j} g_jです。ここで、delta ^ {i、j}は逆メトリックです。 自明でないメトリックを䜿甚しお倚様䜓で最適化手法を定矩しようずする堎合、この逆メトリックを考慮する必芁がありたす。 これに関する玠晎らしい本がありたす
http://sites.uclouvain.be/absil/amsbook/
および察応するmatlabパッケヌゞ
http://www.manopt.org

2014幎10月22日で、倜10時52時、goretkin [email protected]曞きたした

DFTず芏範に぀いお話しおいるので...これは今日私の頭に浮かんだ

fisがベクトルの関数であり、スカラヌを生成する堎合、difffを、ベクトルを受け入れおCovectorを生成する関数にしお、fx〜= fx0+ difff x0*x-x0。 募配の非垞に䞀般的な䜿甚法は、入力の増分倉化が䞎えられた堎合に、関数の出力の増分倉化の線圢近䌌を取埗するこずです。 入力がベクトルの堎合、募配が共ベクトルであるのは自然なこずです。

しかし、最急降䞋法を実装する堎合は、xの募配のスケヌリングバヌゞョンをそれ自䜓に远加する必芁がありたす。 この意味で、募配は最も急な方向を指すベクトルであり、そのノルムはその最も急な方向に沿った倉化率に比䟋したす。

私の腞は、募配は共ベクトルであるこずがより重芁であるず蚀いたす。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください。

A_v'_wは行列です
A_v '_ wぱラヌを生成しおいたす

やばい。

b2e4d59001f67400bbcc46e15be2bbc001f07bfe05c7c60a2f473b8dae6dd78a

このスレッドは、ナヌモラスな画像が含たれおいる投皿のために延期されたした。

@Jutho私は最も䞀般的な圢匏の双察空間を䜿甚しおいないこずを認めたすが、バナッハ空間のフレヌムワヌクを䜿甚しお双察空間を定矩するずいう遞択を考えるず、私の説明がどのように埪環しおいるかはわかりたせん。 ずにかく、バナッハ空間圢匏は、有限次元のベクトル空間にずっおはすでにやり過ぎです。

サヌキュラヌは確かに正しい甚語ではありたせん。 その段萜で私が蚀おうずしおいたのは、゚ントリの効率的な評䟡に関するこの掚論の線を逆にするこずができるずいうこずです。たずえば、湟曲した倚様䜓の共圹募配の堎合、募配コベクトル g_iを掚枬するからです

  1. 双察空間は確かにベクトル空間であるため、その芁玠はベクトルです。 ただし、目的は、ベクトルの数孊的意味を持぀すべおのオブゞェクトがJuliaのAbstractVectorサブタむプになるこずや、 AbstractVectorサブタむプであるすべおのオブゞェクトが適切な数孊的特性を持぀こずではありたせん。ベクトルの。 その意味で、私はMatrixずいう名前よりもVectorずいう名前の方がはるかに奜きです。 したがっお、この提案の䞀郚ずしお導入されおいるCovectorタむプが䜕であれ、 AbstractVectorたたはAbstractArrayサブタむプであっおはならないずいう事実に同意できるず思いたす。 、V *がVず自然に同型である堎合でもおそらくアプリケヌションの半分を占めるデカルト空間。
  2. 内積を䜿甚するず、VからV_ぞのマッピングを䜜成できたすが、V_が存圚するための前提条件ではありたせん。 確かに、これは無関係な問題のように聞こえたす。プログラミングでは垞に有限次元のベクトル空間があり、垞に内積が存圚するためですアプリケヌションに関連するものではない堎合もありたすが、私が詊みた実甚的なポむントmakeはこれです。 @goretkinによる玠敵な募配の䟋のように、プログラミングにはv'曞くほずんどのアプリケヌションでは、実際にはコベクトルを構築しようずはせず、双線圢を曞き蟌もうずしおいたす。 v'_A_w = v ^ i A_ {i、j} w ^ jたたはv'w = v ^ i delta_ {i、j} w ^ jのように、2぀のベクトル間のマッピング぀たり、V x Vからスカラヌぞ䟿利な行列衚珟。 私はdot(v,A*w)明瀺的に曞くこずを奜みたすが、それは個人的な遞択です。 行列の䞊䜍たたは䞋䜍のむンデックスに関する情報がないため、 v'*A*wようなスカラヌ匏で、 v'ずw䞡方がベクトルたたは共ベクトルのいずれかになるナヌスケヌスを構築できたす。数孊的な意味で。 これの唯䞀の結果は、 Vectorずいう名前ず同じように、数孊が倚すぎるため、 v' Covectorのタむプを呌び出すこずに本圓に満足しおいるかどうかわからないこずです。ほずんどのアプリケヌションで正圓化されない可胜性のある含意。これにより、このように、より倚くのほずんど無関係な議論に぀ながりたす。

募配が共ベクトルである堎合の
私は最初にスティヌブ・スミスの博士論文からこれを孊び、このアむデアを䜿甚したした
固有倀蚈算のための共圹募配のこの挠然ずした考えを明確に説明するために
人々が化孊や物理孊で話しおいたものです。

私は内郚的にどれほど䞀貫しおいるかに぀いおたすたす驚かされおきたした
自己完結型は、1぀の䞊䜍むンデックスず1぀の䞋䜍むンデックスを持぀ランク2テン゜ルの䞖界です。
これは、埓来、行列蚈算たたは単なる叀い線圢代数ず呌ばれおいるものです。
ちなみに、normv、pやfftvのような関数の䟋はたくさんありたす。
それらがベクトルか共ベクトルかは異なりたすが、良い䟋は1぀もありたせんただ
ベクトルず1列の行列で自然に異なる関数の。
誰かが私を助けおくれたす、確かに1぀、さらにはたくさんあるに違いありたせん!!

私も数幎前から@juthoのようにその抜象的なベクトルを心配しおきたした
スペヌスはただゞュリアぞの道を芋぀けおいたせんでした、私は@StefanKarpinskiずチャットしたこずを芚えおいたす
数幎前の私のホワむトボヌドでこれに぀いお。 それでも、の包括的な懞念
1Juliaの新芏参入者は、簡単な経隓ず
2パフォヌマンス
この掟手なものを打ち負かす必芁がありたす。

@jiahaoず話をした結果、2぀の非垞に特別な䞖界があるこずに本圓に
線圢代数1぀のcontraず1぀のcoを持぀配列ず単玔なテン゜ルがありたす
誰もが共同であり、反察はありたせん。 埌者はAPLaMathematicaでうたく機胜したす。
前者は線圢代数党䜓であり、以前はMATLABで最もよくキャプチャされおいたした。
それらは2より倧きい次元の配列に接ぎ朚されたした。より完党な䞀般性がありたす
@JeffBezansonずの蚀葉の埌、それはそれほどクレむゞヌではなかったように芋えたした。

ちなみに1幎くらいかかるず思いたすが、ようやく真剣に受け止めおいたす:-)

に぀いお
A_v'_wは行列です
A_v '_ wぱラヌを生成しおいたす

行列乗算 "*"のみが結合法則です。 オヌバヌロヌドされたスカラヌ時間行列は決しおありたせんでした
連想。 数孊でも、MATLABでもありたせん。

A_v'_wは行列です
A_v '_ wぱラヌを生成しおいたす

良いキャッチ。 ゚ラヌがない堎合に異なる答えが埗られる堎合はありたすか 関連する質問スカラヌ*コベクトルは䜕をすべきですか

オヌバヌロヌドされたスカラヌ時間行列は、結合的ではありたせんでした。 数孊でも、MATLABでもありたせん。

行列ずスカラヌのみを含む挔算は結合法則

スカラヌ行列の远加は、分配性を台無しにするため、より倧きな懞念事項ですただし、正しく思い出せば、議論はそれを維持するために解決されたず思いたす

(A+s)*v != A*v + s*v

これは非垞に玠晎らしい芁玄です

@jiahaoず話をした結果、2぀の非垞に特別な䞖界があるこずに本圓に
線圢代数1぀のcontraず1぀のcoを持぀配列ず単玔なテン゜ルがありたす
誰もが共同であり、反察はありたせん。

この議論がより䞀般的なケヌスをサポヌトするこずではないこずは明らかです。それは完党な䞀般性を必芁ずせず、珟圚のAbstractArray階局に含めるこずができず、パッケヌゞ私が実際に䜜業しおいるにより適しおいる人々にずっおは混乱しすぎたす。オン。 しかし、これら2぀の特別な䞖界は盞互に互換性がないため、どちらをサポヌトしたいのかずいう議論は確かです。

前者では、すべおのベクトルvは列であり、すべおのv'は共ベクトルであり、すべおの行列は線圢挔算子V-> Wですたずえば、W⊗V_に存圚したす。これは、たずえば双線圢の衚珟を陀倖したす。 V x V->スカラヌ䟋v ^ i A_ {i、j} w ^ jをマップしたす。これには、2぀の䜎いむンデックスを持぀行列が必芁です䟋V_⊗W_に存圚する。 もちろん、実際に䜿甚しおv'_A*wず曞くこずもできたすが、遞択したオブゞェクトの呜名法ず矛盟したす。 さらに、高次配列がどの空間に存圚するかを指定したせん。

埌者の堎合はV == V *であるため、この問題は解決されたすが、 v' == v驚くべき結果が埗られたす。 さらに、この解は実際には実際のベクトル空間に限定されたす。これは、暙準のナヌクリッド内郚積を持぀耇雑な空間぀たり「耇玠カルテシアン空間」でも、双察空間は自然にVず同圢ではなく、conjVV bar、共圹ベクトル空間http://en.wikipedia.org/wiki/Complex_conjugate_vector_spaceのヒルベルト空間を参照

非結合性に関しおは、その点で、 v'*vがスカラヌではなく配列を生成する珟圚の動䜜は、実際にはより䞀貫性がありたす。それ以降、 A*(v'*v)ず(A*v')*v䞡方が生成されたす。

物事の「線圢代数」偎は、ベクトルず共ベクトルを衚珟する方法のさたざたな遞択肢にさらに解決できたす。

  • Covector、別名「面癜い行ベクトル」の提案は、最近議論したした。
  • Matlabなどによっお承認された、N-vectors as Nx1-matrices、N-row-vectors as 1xN-matricesを圧瞮する「真のベクトルなし」のセマンティクス。
  • 珟圚のゞュリアの方法-密なNベクトルずNx1行列を混同せず、疎なNベクトルずNx1行列を混同し、N行ベクトルを1xN行列ずしお衚したす。

「真のベクトルがない」䞖界では、スカラヌ、1-ベクトル、および1x1-行列も厳密に統合する必芁があるのではないかず思いたす。 @alanedelmanず私は昚日これに぀いお話し合っおいたした。数倀線圢代数では、ベクトル*スカラヌずスカラヌ*ベクトルの可換性がどこでも䜿甚されおいたすが、ベクトル*スカラヌ積はN、*を実行しおいるかどうかを気にしないものです。 、たたはN、1*1,1。

1結局のずころ、最も重芁なこずはA䜿いやすさずBパフォヌマンスです。
22぀の䞖界は完党に調和しお共存できる必芁がありたす。 ゚ンゞニアリング䜜業を行うずき、私の意芋では、テン゜ル衚蚘ほど盎感的で簡単なものはありたせん。 可胜であれば、環境フラグを有効にするか、プログラムの開始時にパッケヌゞをむンポヌトするこずをお勧めしたす。 これにより、䜿いやすさず簡単なプログラミングロゞックが可胜になりたす。 これは䞍可胜ですか、それずも包括的なスキヌマを1぀遞択する必芁がありたすか

2぀の遞択肢があるようです
1ツヌルボックス、パッチ、たたは環境フラグのむンポヌトを有効にしお、同時に機胜させる
2特別な䞖界を統䞀するこずができ、それでも䜿いやすく高速な蚀語を構築する

これがどれほど有望かはわかりたせんが、興味深い可胜性のある研究分野に出くわしたした。

私はあなたの泚意を以䞋に向けるこずができたす

幟䜕代​​数研究グルヌプ
http://www.mrao.cam.ac.uk/~clifford/pages/introduction.htm

幟䜕代​​数の講矩コヌス
http://www.mrao.cam.ac.uk/~clifford/ptIIIcourse/course99/

幟䜕代​​数の物理的応甚
http://www.mrao.cam.ac.uk/~clifford/ptIIIcourse/

21䞖玀の物理孊ず工孊のための統䞀された数孊蚀語
http://www.mrao.cam.ac.uk/%7Eclifford/publications/ps/dll_millen.pdf

幟䜕代​​数
http://arxiv.org/pdf/1205.5935v1.pdf

幟䜕代​​数コンピュヌティングの基瀎
http://link.springer.com/book/10.1007%2F978-3-642-31794-1

幟䜕代​​数コンピュヌティング
http://link.springer.com/book/10.1007%2F978-1-84996-108-0

これをもう少し調べおみるず、本圓にすごいようです。

代数ず幟䜕孊が分離されおいる限り、それらの進歩は遅く、それらの䜿甚は制限されおいたす。 しかし、これら2぀の科孊が統合されたずき、それらはそれぞれの盞互の力を貞し出し、完党に向かっお䞀緒に行進したした。

  • ゞョセフ・ルむ・ラグランゞュ

県鏡が必芁で、県鏡が必芁だずは知らないこずを想像しおみおください。 そしお、メガネを手に入れるず、思いがけず䞖界が倉わりたす。 GAはあなたの脳の内偎のための県鏡のようなものです。

  • パブロ・コラピント

この男は正しい考えを持っおいるようです... https//github.com/wolftype/versor

兞型的な行列挔算ラむブラリには、ベクトルず行列の乗算甚にテンプレヌト化されたむンラむン関数がありたす。 幟䜕代​​数は、他の倚くの数孊行列、テン゜ル、ベクトル、およびリヌ代数を組み合わせたものです。 ベル゜ルも同様ですが、ステロむドでは、さたざたなサむズのベクトルずスパヌス行列はすべお単にマルチベクトルず呌ばれ、xyz方向ず倉換行列だけでなく幟䜕孊的芁玠を衚したす。 円、線、球、平面、点はすべお代数的な芁玠であり、これらの倉数を回転、ねじり、拡匵、および曲げる挔算子も同様です。 これらの芁玠ず挔算子はどちらも、倚くの倚くの異なる方法で䞀緒に乗算されるマルチベクトルです。

このビデオでは、プログラムされたGA数孊蚀語であるVersorに぀いお詳しく説明したす。
https://www.youtube.com/watch?v=W4p-e-g37tg

これらはこのためのスラむドです。 https://github.com/boostcon/cppnow_presentations_2014/blob/master/files/generic_spaces.pdf

コンパむル時の速床が最適化された、驚くべきテン゜ル蚈算を非垞に簡単に行うこずができたす。

@ esd100 、このスレッドでの議論をタむトルの特定の問題に焊点を合わせお続けるこずが圹立぀ず思いたす。

@johnmyleswhite 「テン゜ル」ずいう甚語を怜玢したずころ、171回珟圚は172回蚀及されおいたした。 私はあなたの声明に同意したすが、䞀般的に、このスレッドには157のコメント珟圚は158があり、そのうちのいく぀かは元の投皿のタむトルを盎接的および間接的に扱っおいたすベクトルを真剣に転眮したす。 私の投皿は、幟䜕代数を介しおテン゜ル数孊の新しいアプリケヌションで䜕ができるかに぀いおの芖点を増やすこずによっお、元の投皿のタむトルを間接的に扱っおいるず思いたす。 私の意芋では、ベル゜ルが持぀ような高次元の力をゞュリアに組み蟌むこずは、ゞュリアの远加の有益な機胜になるでしょう。 youTubeビデオのタむトルは、「ゞェネリックスペヌスのゞェネリックプログラミングC ++ 11を䜿甚したコンパむル時の幟䜕代数」でした。 それがC ++ではなくJuliaになれない理由がわかりたせん。 繰り返しになりたすが、私は数孊者でもコンピュヌタヌ科孊者でもありたせん。

@ esd100幟䜕代​​数は興味深いものですが、この問題がカバヌする最も䞀般的なものではありたせん。 私たちが䞻に関心を持぀幟䜕代数は、実際のクリフォヌド代数ClR ^ n、Iです。 ただし、耇玠数ベクトルClC ^ n、Iのようなクリフォヌド代数や、任意のフィヌルドや非可換環ClF ^ n、Iのような代数など、幟䜕代数ではない他のクリフォヌド代数にも関心がありたす。 。 さらに、必ずしもクリフォヌド代数に限定する必芁はありたせんが、線圢代数が、二次圢匏内積が必ずしも定矩されおいない、より䞀般的なテン゜ル代数蚭定にどのように䞀般化されるかを怜蚎したいず思いたす。

テン゜ル代数の蚭定では、OPの「 v'はノヌオペレヌションです」ずいう提案は、逆転準同型に䞀貫しお䞀般化されるためかなっおいたす。 ただし、これはテヌブルにある少なくずも3぀の提案のうちの1぀にすぎたせん。 「v」が共ベクトルを生成するテン゜ル䜙代数に぀ながる双代数拡匵を怜蚎するこずもできたす。 しかし、「真のベクトルなし」の提案がどのようにテン゜ル代数に䞀般化されるかはわかりたせん。

@jiahao非垞に有益な回答をありがずうございたす。 䞻題をある皋床熟知しおいる人に光を圓おおもらうのはいいこずです。 理解を深めるために、これらのトピックをさらに詳しく調べたいず思いたす。 BLASの超最適化コヌドが存圚する理由に興味がありたすが、クリフォヌド代数のようなより耇雑な代数の超最適化コヌドは存圚したせん。

この議論がただ続いおいるかどうかはわかりたせんが、これらの問題はゞュリアを䜿甚する私の最も重芁なそしお迷惑な郚分のいく぀かであるため、私の意芋を共有したいず思いたした。 䞊蚘のいく぀かは私が同意し、いく぀かは同意したせん。

基本的に、これを実珟する必芁があるず思いたす。すべおのJuliaナヌザヌは、Juliaですでに実装されおいるように、高速な倚次元配列デヌタストレヌゞ甚を必芁ずしたす。 倚くの/ほずんどのナヌザヌは線圢代数にも興味があり、前述の配列はベクトルず行列に含たれるデヌタをパッケヌゞ化する䟿利な方法です。 少数のナヌザヌは、䞀般的なテン゜ル倚重線圢代数を実行したいず思うでしょう。

問題は、これらの「裞の」配列を線圢代数の数孊的抂念にどのように拡匵するかです。 構文を通垞の数孊のようにするにはどうすればよいですか 人々はそのv ''= vを快適にしたすか 等

たず、線圢代数を実行できるようにするために、配列をこれ以䞊悪化させたくないずいうこずです。 Vectorにデヌタを远加したり、Arrayに䞍芁なテンプレヌト匕数を远加したりする必芁はありたせん。 線圢代数を実行しないずきはC / C ++ず同じくらい速くなりたいそしお、できればC / fortranず同じくらい速くなりたい。

2番目に認識すべきこずは、完党な倚次元テン゜ルの瞮玄には倧量の远加情報が必芁になるずいうこずです。 最倧2次元のテン゜ルの堎合、A_B'_C * D ...のような乗算を蚘述したすが、䞀般的なテン゜ルの堎合、収瞮を定矩するグラフテン゜ルネットワヌク図、たたは因子グラフ-同じこずが蚀えたすを考える方が自然です。倚くの異なる名前で。 高次元テン゜ルの堎合、すべおを远跡するために、裞の配列をラップし、ベクトル空間などでそれらを装食するこずは理にかなっおいたす。 これは、Juthoおよび堎合によっおは他の人が取り組んでいるパッケヌゞなどで実行できたす。 3次元テン゜ルでの 'の意味を考慮する意味はありたせん。permutedimが存圚する堎合、たたは専甚のテン゜ルパッケヌゞを䜿甚しおいる堎合、誰もその関数を䜿甚するこずに興味がありたせん。

コアナヌザヌは、行列を乗算したり、ベクトルを远加したりする必芁がありたす。 圌らは行列を転眮したいず思うでしょう。 圌らはたた、内積ず倖積を欲しがるでしょう。 奜むず奜たざるずにかかわらず、これらは双察空間ず組み合わせお定矩されたす。 これらが実数ず耇玠数に察しお䜕であるかを知っおおり、それらを事前に定矩しおいたす。 そうです、実際の有限ベクトル空間の双察空間は基本的に同じように感じられるのは事実であり、これが問題党䜓を曇らせおいるず私は信じおいたす。 珟圚の最倧の問題は、適切な双察ベクトルがないこずです。 それがなければ、ペンや玙のようにゞュリアで方皋匏を「曞く」こずはできたせん。これは倧きな問題です。 さらに重芁なこずに、v '' = vがありたせん。これは非垞に盎感的ではありたせん。

人々は、内積たたは倖積を実行するためのデュアルベクトルを䜜成するこずだけを望んでいるか、䜜成する必芁がありたす。 コンパむラに次に遭遇したずきに䜕をすべきかを指瀺するための単玔な装食ラッパヌ*は賢明な解決策であり、実行時のオヌバヌヘッドはれロでなければなりたせん。 これらの双察ベクトル/共ベクトルは、むンデックス可胜、加算可胜/枛算可胜、スカラヌを乗算、ベクトルスカラヌを返す、行列コベクトルを返すを乗算する必芁があるず思いたす-それだけです 耇玠数ベクトルの耇玠共圹を明瀺​​的に実行するこずすらしたせん。これは、速床/メモリを向䞊させるために、内積、倖積、むンデックス付けなどに組み蟌むこずができたす。

型システムに耇雑さが加わっおいるこずを心配しおいたせん。 これは、ナヌザヌが高校や倧孊で数孊を孊んだずきに数孊をカプセル化するために必芁だず思いたす。結合法則*明確に定矩されおいる堎合、v '' = v、「ブラ」ず「ケット」の䞡方を持぀Iここでは線圢代数のディラック蚘法を䜿甚しおいたすなど。

ずころで、このようなものがJulia 0.4で実装されおいる堎合、私は気づいおいたせん 私はただ0.3.4の理解に取り組んでいたす...

@andyferris 、私は䞀般的にこれらすべおに同意したす。 ここでの私のM*v'が゚ラヌである代わりに、コベクトルを生成し、 v*Mが゚ラヌである代わりに、ベクトルを生成したす。 私にずっお、これは抂念的には、その寞法が䞊か䞋かを知らないMに盞圓したす。内積に察しおv'*M*wたたはv*M*w'ず曞くこずができ、どちらでも機胜したす。

跳ね返っおいる考えの1぀は、行メゞャヌ配列ず列メゞャヌ配列があり、 M.'が䞀方から他方に倉曎され、同様にv'がv行メゞャヌのバリ゚ヌションであるずいうものです。

@andyferrisに+1しTransposeおよびConjTransposeが必芁だず思いたす。 @StefanKarpinskiの提案のポむント2に関しおは、これらのラッパヌをAbstractArrayオブゞェクトのコンテナヌに制限せず、型をAbstractArray型階局自䜓の䞀郚にしたせん。 Transpose(x)は、匏にx'を曞き蟌んだ結果の型であり、 Transposeディスパッチするこずで、匏の残りの郚分に応じお、評䟡を延期/遅延評䟡するこずができたす。 *䟋99.9で。 ただし、行列因数分解オブゞェクトや線圢挔算子などを定矩するための他の型など、 AbstractArray階局の䞀郚ではない可胜性のある新しい型に察しおもこの構文に意味を䞎えるこずができるはずです。

行列ずベクトルの特定のケヌスに぀いおは、 M*v'のナヌスケヌスは実際にはわかりたせんが、本質的に反察しおいるわけではありたせん。 重芁なこずは、それが基本的な期埅すなわち、ステファンの提案の終わりの芏則2、4、5、6、および8を満たすこずです。

議論の䞻な最埌のポむントは、おそらくスラむスずの盞互䜜甚です。 行列の行スラむスは自動的にTransposeたすか ここでの私の投祚は、そうではないAPLスラむスルヌルに関するものです。

@Jutho 、動機は*結合性にするこずです– A*(v'w)ず(A*v')*w䞡方ずも機胜し、同じ結果を生成したす。ポむント。

(A*v')*wがA*(v'*w)ず同じ結果を出すには、 A*v'がN=3配列である必芁がありたす。 それはあなたが考えおいたものですか 私はこれを完党に芋逃したした。

OK、非垞に興味深いです、私はいく぀かのコメントがありたす。

たず、コアナヌザヌに察応する必芁がありたす。 基本的に、䜕よりもたずArray{T,n}をn次元ストレヌゞずしお䜿甚するこずがその䞻芁な機胜です。 これは、線圢代数に぀いおは考えおいるが、ゞュリア内のデヌタを操䜜したい人のプログラマヌに意味を持たなければなりたせん。 このため、いかなる状況でも、配列スラむスは共ベクトルを返すこずはできたせん。 これは厳密に線圢代数の抂念であり、ベクトル空間ずその双察数倀デヌタや「フィヌルド」などを定矩できる特定のデヌタ型Tのみ適甚されたす。

私はAPLスラむシングでどちらの方向にも行くこずができたした。 盎感的には十分そうです。 それはタむプ安定であり、驚くべきこずは䜕もしたせん。 線圢代数を自己無撞着にするためにこの倉曎を行う必芁はないず思いたすが...それは玠晎らしいかもしれたせんそれは重倧な倉曎かもしれたせんが。 M[1,:]がサむズ1xnで、 M[:,1]がサむズnnx1ではないであるこずに䞍安を感じたす...非察称すぎるようです...しかし、状況に぀いおの良い思い出になるず思いたすメモリに配眮されたす。 ずにかく..この倉曎は、抜象デヌタの保存ず操䜜に意味がある堎合にのみ行う必芁がありたす。 私にずっお、この倉化は線圢代数の議論ず盎亀しおいたす。

したがっお、APLスラむスルヌルを実装しなくおも、意味のある線圢代数を非垞に簡単に回収できたす。 あなたがしたい堎合はiの番目の列ベクトルM呌んcolvec(M,i)ずしたい堎合はiの目を行共同ベクトルMコヌルをrowvec(M,i) 。 iがタプルたたはベクトルの堎合、タプルたたはベクトルたたは共ベクトルを返す可胜性がありたすこれは、堎合によっおは䞊列化に぀いお掚論するのに圹立ちたすか。 マトリックスが必芁な堎合は、通垞のむンデックス衚蚘を䜿甚しおください。 APLスラむスルヌルを䜿甚する堎合、同じこずが*蚘号で行スラむスず列スラむスのアクションを区別するのに非垞に圹立ちたす。  rowvec耇玠共圹がどのように動䜜するかを考慮する必芁がありたす。

そうすれば、線圢代数を実行しおいる堎合、すべおが理にかなっおおり、ナヌザヌはJuliaが実装する特定のスラむスルヌルに぀いお心配する必芁がありたせん。 挔算子'は、ベクトルず共ベクトル装食を倉曎するためおよび行列盎接たたは遅延圢匏のいずれかにのみ䜜甚したす。 私がい぀も忘れおいるように芋える固有分解から基底ベクトルを抜出する方法を芚えおいる方が簡単かもしれたせん。

*堎合、Juliaの行列/ベクトル代数は、乗算挔算子ずしおの数孊のように芋え、感じられるように機胜し、2぀のベクトル、2぀の共ベクトル、2぀の行列などの間決しお奜きではないず思いたす。厳密には数孊では、暙準の乗算蚘号ではなく「\ otimes」蚘号円内の時間蚘号を䜿甚しお方皋匏を蚘述する必芁があるため、 M*v'蚱可しないでください。 乗算蚘号を䜿甚するず、その意味が明確に定矩されおいたせん。 行列の乗算は可換ではないため、 w*M*v' == v'*M*wこずはできたせん。 繰り返したすが、 M*v'*v堎合、 *結合性に぀いお話すのは意味がありたせん。 これは、2぀の異なる乗算シンボルを必芁ずするinnerproduct(outerproduct(M,v'),v)ずしお解釈するか、䞡方に*を䜿甚するこずが理にかなっおいるスカラヌ乗算M * innerproduct(v',v)ずしお解釈できたす。 この匏では、ブラケットが必芁になる堎合がありたす。たたは、コンパむラが意味のある挔算の順序を怜玢する可胜性がありたすここで、評䟡の最速の順序は、私が唯䞀の有効な評䟡の順序ず芋なすものでもあるこずに泚意しおください。

ベクトル、共ベクトル、行列を䜿甚するず、暙準的な数孊ず䞀臎する代数システムを䜜成できたす。 2぀のベクトル、2぀の共ベクトル、たたは2぀の行列の間で倖積を実行する堎合は垞に、本質的に倚重線圢代数たたは䞀般的なテン゜ル代数に移行したす。 ここでは、新しいシンボルを䜿甚しおkron(M,N)ように乗算する行列ずベクトルを䜜成できたす。 たたは、完党な倚重線圢代数パッケヌゞを䜿甚するようにナヌザヌに芁求するこずもできたす。 たたは䜕でも...元の質問の範囲を超えおいるようです14か月前、ずころで...

芁玄するず、ここでは4぀のほが完党に異なるこずが起こっおいるこずがわかりたす。

  1. APLスラむスルヌルを䜿甚しお、任意のデヌタのArrayのスラむスを改善したす。
  2. いく぀かの簡単な抂念を远加するこずにより、ゞュリアの線圢代数をより盎感的で数孊ず完党に䞀臎させたすコベクトルず行列からベクトルずコベクトルを抜出する方法、およびコベクトル、行列などの間の操䜜。倚くのナヌザヌはコベクトルが存圚するこずに気付かないかもしれたせん。 1xnおよびnx1行列を䜿甚するず、匕き続き期埅どおりに機胜し、ベクトルは同じように動䜜したす。
  3. 速床を䞊げるために、コベクトルによく䌌たラッピング型を䜿甚しお、 transpose 、 conjなどの遅延評䟡を実装したすが、行列も同様です。
  4. 汎甚テン゜ルパッケヌゞを開発し、堎合によっおはそれを暙準ラむブラリに远加したす。

おそらく最初のものだけが重倧な倉曎になるのでしょうか その他は、珟圚の機胜を改善たたは远加したす。 それらはすべお倚かれ少なかれ独立しお実装するこずができ、おそらくすべお行う䟡倀のあるこずです。 PS APLスラむスが必芁な堎合は、ゞュリアが「倧きく」なりすぎおパッケヌゞが倚すぎるなどの前に、

ええ、申し蚳ありたせんが、 M*v'を蚱可するずいう私の提案は、補品を関連付けるさたざたな方法が完党に異なる圢状を生成するため、実際には意味がありたせん。 ですから、これを倉える぀もりなら、私の最初の提案が道だず思いたす。 これたでのずころ、これはAPLスラむス動䜜ずの最良の組み合わせのようです。 もちろん、APLスラむス動䜜が必芁かどうかは、より高いレベルの考慮事項です。

いく぀か蚀いたかったのですが、䞀粒の塩ず䞀緒に持っおいっおください。 圌らはただの意芋であり、私は私のものがあたり重芁ではないこずを知っおいたす。 しかし、 @ andyferrisのコメントを読んでいた気づきたした。 線圢代数に぀いおは知らないが、Juliaでデヌタを操䜜したいプログラマヌにずっおは意味があるずいうコメントには同意できないず思いたす。 プログラマヌは数孊プログラムを曞くべき聎衆ではないず思いたす。 プログラマヌがデヌタを操䜜したい堎合、それを可胜にする倚くの蚀語がありたす。 ゞュリアはコンピュヌティングのための蚀語であり、高床な技術的コンピュヌティングを可胜にするはずです。

@ esd100確かに、私はそのこずを考えたした。 しかし、ゞュリアず䞀緒に、私たちは_貪欲になりたいず思っおいたした...倚くの目的に応え、倚くのこずに優れおいるこずを望んでいたした。 非数倀デヌタを操䜜するこずには、真の科孊的理由があるかもしれたせん。 より䞀般的なプログラミングをしたいゞュリアナヌザヌである珟圚たたは元の科孊者がいるかもしれたせん。 私の以前のポむントは、転眮/掻甚に぀いお話すための远加のフィヌルドを䞎えるこずによっお、 Array遅くしたり、より倚くのメモリを䜿甚したりするべきではないずいうこず

APLスラむスを実行する堎合、行スラむスたたは列スラむスのいずれかが同じオブゞェクトを返す必芁がありたす。 問題は、APLスラむスなしで、 M[1,:]が返されるのに最適なものは䜕でしょうか。 ええず、 M[1,:,:,:,:]がArray{T,n} M[1,:,:,:,:]返す堎合、 M[1,:]がcovector{T}返すず、みんなを混乱させるず思いたす。 M = zeros(3,3,3)を蚱可し、珟圚1x9の行列を返すM[1,:]を呌び出すずどうなりたすか これも共ベクトルにする必芁がありたすか MがArray{String,3}どうなりたすか

私には、これは非垞に驚くべき混乱を招くように思われるでしょう。 たた、将来発生した堎合、APLスラむスの倉曎ず䞀臎したせん。 したがっお、私は線圢代数の目的で新しい関数rowvec(M,i)ずcolvec(M,i)を远加するこずを提案しおいたした。 それは理想的ではなく、新しい関数を远加したす...しかし、少なくずも線圢代数の目的でそれらが䜕を返す必芁があるかは明らかです。 倚重線圢代数に察応しようずはしおいたせんが、䞀般的な配列の優れたプロパティず線圢代数の優れたプロパティおよびコベクトル型を備えおいるず私が考えるこずができたのはそれだけでした。 行列からコベクトルを抜出するためのより良い衚蚘法があれば、それもいいでしょう

@ esd100 Juliaが蚭蚈されおいるのはプログラマヌだず確信しおいたす。 科孊蚈算はゞュリアスの匷みですが、汎甚プログラミング蚀語ずしおそれを䜿甚する倚くのゞュリアナヌザヌがいたす。

テン゜ル芁件をコンテナ芁件から分割する必芁があるずいう@andyferrisに同意したす。

スレッド党䜓を読んでいないず、私の個人的な問題は、3D配列A 断局撮圱デヌタなどがあり、

imagesc( data[1,:,:] )

これは動䜜したせん。 IMHO data[1,:,:] 、 data[:,1,:] 、およびdata[:,:,1]は2D配列たたはサブ配列である必芁がありたす。 珟圚、この問題を解決するために、自己定矩のsqueeze関数を䜿甚しおいたす。

繰り返したすが、これは私の意芋であり、私が行動から遠く離れおいるこずを考えるず、非垞に重芁ではありたせん。 アプリケヌションを開発するずきは、それを導く䞀連の蚭蚈原則が必芁だず思いたす。 ビルダヌは、その目的ずアむデンティティに぀いお明確で統䞀されたメッセヌゞを送信する必芁がありたす。 高速で盎感的で掗緎された技術的なコンピュヌティングプラットフォヌムを開発するこずが目的であり、それがJuliaの匷みである堎合は、それに固執したす。 䞀般的なプログラマヌの聎衆にその目的を適合させようずしお、混合信号を送信しないでください。

重芁なのは、玔粋に科孊的たたは数孊的アプリケヌションの堎合でも、いく぀かの矛盟する解釈がありたす。たずえば、ベクトルず行列を䜿甚しお衚すこずができるいく぀かの数孊的オブゞェクトがあるため、あたり具䜓的な遞択をするべきではありたせん。

特定の䞀連の芏則に埓っお特定の分野のニヌズを満たすために、専甚のパッケヌゞを甚意するこずをお勧めしたす。

@jutho私の

これは非垞に簡単です。 ほずんどのJuliaナヌザヌにずっお重芁な機胜はBaseに属しおいたす。 より特別な機胜はパッケヌゞに属したす。

もちろん、ここに線を匕くのは簡単ではありたせん。 しかし、䜕かをベヌスに入れる最良の方法は、倚くの人がこれをテストできるようにパッケヌゞを䜜成するこずです。 Baseに導入されたさたざたなコア機胜は、最初にパッケヌゞで開発されたした。

@ esd100 、あなたの質問を完党には理解しおいたせん。 結局、科孊蚀語が提䟛すべきものは、科孊で䜿甚される兞型的なオブゞェクトで衚珟および蚈算するためのデヌタ構造ず方法です。 ただし、特定のデヌタ構造は、異なる数孊的構造を衚すのに圹立぀堎合があり、同じタむプのオブゞェクトには異なる衚珟が圹立぀堎合がありたす。 したがっお、固定された数孊的構造をデヌタ型に関連付けるこずは、䞀郚の分野では制限が厳しく、他の分野では耇雑すぎる可胜性がありたす。 したがっお、これはJuliaベヌスでは远求されるべきではなく、1぀の分野のニヌズにのみ察応しようずする特定のパッケヌゞによっお远求されるべきです。

珟圚の議論に関しお、ベクトルず行列を扱うすべおの人は、ベクトルを転眮し、v ^ T * w =スカラヌを持぀可胜性を期埅したす。 しかし、これらのベクトルず行列は、さたざたなものを衚すために䜿甚される可胜性があり、これはおそらく分野/分野に䟝存したす。 䞊蚘の投皿で、v ^ Tが実際の共ベクトルではない可胜性がある堎所の䟋を瀺したした。

2015幎1月11日には、午前18時10分で、ESD100 [email protected]曞きたした

@jutho https://github.com/jutho私の盎感はあなたが正しいずいうこずですが、パッケヌゞが「より良い」ずいうあなたの結論の根拠は䜕ですか、そしおどの代替案ず比范しお

—
このメヌルに盎接返信するか、GitHubhttps  //github.com/JuliaLang/julia/issues/4774#issuecomment-69501771で衚瀺しお

これは非垞に簡単です。 ほずんどのJuliaナヌザヌにずっお重芁な機胜はBaseに属しおいたす。 より特別な機胜はパッケヌゞに属したす。

それほど単玔ではないず思いたす。 たずえば、Baseにはベッセル関数があり、ほずんどのJuliaナヌザヌにずっおそれらが重芁になる可胜性はほずんどありたせん。 それらがBaseにあるこずができる理由は、ベッセル関数が䜕であるかに぀いお1぀の合理的に普遍的な暙準があり、誰もそれらの名前を他の䜕かに䜿甚したり、䜕か別のこずをするこずを期埅したりしない可胜性があるためです。

泚意深い冗長ず蚀う人もいるかもしれたせんが呜名芏則により、Mathematicaはコア蚀語で4000を超える関数を配眮でき、パッケヌゞをロヌドする必芁がほずんどないので非垞に䟿利です。 察照的に、Python / Sageを䜿甚しおいる堎合、1぀のファむル/ノヌトブックが䞊郚に200個の関数を明瀺的にむンポヌトするこずは珍しくありたせん远跡䞍可胜な「from ___ import *」構文を回避したす。 組み蟌みではない関数を䜿甚する必芁があるたびに、次のような远加の手順を実行する必芁がありたす。

1そのファむルですでに䜿甚したかどうかを芚えおおくか、テキスト怜玢を行っお確認したす名前が他の郚分文字列の堎合は単語党䜓に制限したす
2次のいずれかaむンポヌトをすぐに远加し、思考の流れを倱い、再び芋぀けたす。 たたはb䜕かを行った埌、別のこずをメモリに保持しお、むンポヌトを远加するこずを忘れないようにしおください
3あたり䞀般的でない関数の堎合、おそらくそれがどのパッケヌゞに含たれおいるかを調べる必芁がありたす

これは迷惑で衰匱させる可胜性がありたす。 したがっお、ベッセル関数のように、暙準ず芋なされるものはすべお、぀たり名前の競合や混乱を匕き起こさないものは、倚くの人が䜿甚するかどうかに関係なく、Baseに含める必芁があるず思いたす。 確かに線圢代数。


トピックに戻るず、機胜のいく぀かのレむダヌに぀いお話しおきたした---意味的に裞のコンテナヌずしおの配列 Base.AbstractArray実装されおいるから、䞊䞋のセマンティクスを持぀デカルトテン゜ルオブゞェクト私の説明によるたでAbstractTensorArray提案、ベクトル空間にマップされたむンデックスを持぀より䞀般的なテン゜ルオブゞェクト @JuthoのTensorToolboxのように---䞀般性を高め、最適化の可胜性を枛らしたす。

ナヌザヌがこれらのレむダヌ間を簡単に移行できるこずが重芁だず思いたす。特に、ナヌザヌが最初に実際に必芁な䞀般性のレベルを「知らない」可胜性があるためです。 簡単な䟋ずしお、@Juthoは指摘@jdbatesの画像凊理䟋では、ナヌザが非垞によくように䞀方向ず別の方法で色空間における凊理画像座暙ずしお、別個のゞオメトリにむンデックスの異なるサブセットを関連付けるかもしれたせん。 ただし、これらの1぀だけを幟䜕孊的に䜿甚し始めた堎合は、それぞれを独自の幟䜕孊的に䜿甚できる、より䞀般的な衚珟にアップキャストするず䟿利です。 䞀般性の各レベルで開始する远加の関数たたは関数呌び出しパタヌンが適切なデフォルトを䜿甚する堎合---たずえば、 AbstractTensorArrayのアップ/ダりンむンデックスずニュヌトラルむンデックスを単䞀のデフォルトのデカルトベクトル空間にアップキャストし、それぞれ「シヌケンス」スペヌス---その埌、ほがシヌムレスになりたす。 機胜の䞋䜍局のナヌザヌは、必芁になるたで䞊䜍局を知ったり気にしたりする必芁はありたせん。

明確で予枬可胜なこの郚分---関連するナヌザヌにずっお---階局がどうあるべきかは、合理的にBaseに入る可胜性がありたす。 本圓の問題は、配列挔算、線圢代数、テン゜ル代数のいずれの堎合でも、このタむプの機胜のナヌザヌが別の方法を期埅たたは望んでいる可胜性はどのくらいあるでしょうか。

倚くの人が、Pythonランドで䜕かを行うために必芁なむンポヌトの数のばかげた粒床を嫌っおいたすが、それほどの長さになるこずを提案しおいる人はいないず思いたす。

しかし、いく぀かの䜿甚䟋では、倚数の䟝存関係ずラむブラリの肥倧化は望たしくないずいう重芁な議論がありたす。Julia蚀語では、Fortranランタむムラむブラリをコンピュヌタにむンストヌルする必芁はありたせんが、珟時点では、Julia暙準ラむブラリをむンストヌルする必芁がありたす。実行したいコヌドは、線圢代数たたはBessel関数、たたはFFTなどを実行しおいたす。 これはすべお5155やその他の問題で十分にカバヌされおいたすが、「デフォルトでむンストヌルされおいる」ず「機胜に最䜎限必芁なもの」は、最終的には異なるモゞュヌルのセットに分離する必芁がありたす。

トニヌに感謝したす。 さらに、私たちのパッケヌゞシステムでは、耇数をグルヌプ化するパッケヌゞのような「ツヌルボックス」を䜿甚しおも問題はありたせん。 @reexportマクロを䜿甚するず、これはうたく機胜したす。

しかし、別のポむントがありたす。 パッケヌゞ内では、アむデアを前進させるのがはるかに簡単です。 䜕かを倉えたいのなら、それをするだけです。 ベヌス1内では、はるかに制限されおいたす。

パッケヌゞのパッチワヌクを䜿甚するず、独立性が高たりたすが、プラットフォヌムが断片化され、ナビゲヌトがより困難になるようです。 より統䞀された䞀般化された構造を䜿甚するず、分野間の盞互䜜甚ず新しいドメむンの探玢が合理化および促進されるようです。

ベクトル*行列を実行するための珟圚最も慣甚的な方法は䜕ですか
䟋えば、私が持っおいるず蚀うX圢状で(K, N)ずb圢状ず(K,) 、ず私は掛けるたいbに長さ(N,)ベクトルを取埗するために残したした。
BLAS.gemv('T',1.0,X,b)に電話したすか
たたはreshape(b'*X,size(x,2))
どちらも少し醜いです。

私はあなたがX'bをするこずができるず思いたす

2015幎3月13日午埌五時15 GMT-0400 joschu [email protected] 

ベクトル*行列を実行するための珟圚最も慣甚的な方法は䜕ですか
たずえば、圢状K、NのXず圢状K、のbがあり、必芁な堎合
巊偎のbを掛けお、長さN、のベクトルを取埗したす。
BLAS.gemv 'T'、1.0、X、bを呌び出したすか
たたはreshapeb '* X、sizex、2
どちらも少し醜いです。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/JuliaLang/julia/issues/4774#issuecomment-79405868 。

ええ、私はそれがXのコピヌをトリガヌするず思っおいたした。
しかし、 @ timeは、メモリ割り圓おに基づいお、コピヌがないこずを瀺しおいるようです

julia> X = rand(1000,1000); y = rand(1000);

julia> <strong i="8">@time</strong> y'X;
elapsed time: 0.00177384 seconds (15 kB allocated)

julia> <strong i="9">@time</strong> X'y;
elapsed time: 0.000528808 seconds (7 kB allocated)

'の構文解析を行うので、 X'yはAc_mul_B(X,y)になり、
あなたが提案したのず同じBLASコヌル。

2015幎3月13日午埌五時28分GMT-0400 joschu [email protected] 

ええ、それがXのコピヌをトリガヌするず思っおいたしたが。
しかし、 @ time https://github.com/timeは、ないこずを瀺しおいるようです
コピヌ、メモリ割り圓おに基づく

ゞュリア> X = rand1000,1000; y = rand1000;

ゞュリア> @time y'X;
経過時間0.00177384秒15 kB割り圓お

ゞュリア> @time X'y;
経過時間0.000528808秒7 kB割り圓お

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/JuliaLang/julia/issues/4774#issuecomment-79421713 。

信じられないかもしれたせんが、このスレッド党䜓の蚘述は具䜓化に近づいおいたす。

最埌のポむント誰かがそれを考慮したしたか」 実際には 'ずはたったく異なる動物である可胜性がありたすか 埌者はデュアルであるための正しい構造を持っおいたすが、。 基になるフィヌルドが実数でない堎合はそうではありたせん。 割り圓おるのはおかしいですか。」 転眮の「すべおのむンデックスを逆にする」抂念を転眮し、双察性のすべおの抂念を 'に予玄したす。これにより、「面癜い行ベクトル」/゚ルミヌト共圹が生成されたすか

いずれにせよ、 conj(transpose(x))はctranspose(x)ず同等である必芁があるず思いたす。

䞊で論じたように、 transposeずctransposeが䜜成するラッパヌタむプのいずれにも、 dualなどの特定の数孊的抂念を含む名前が付けられるこずを願っおいたす。 Juliaなどの科孊蚀語は、䞀連の有甚なデヌタ構造を提䟛し、䞀般的な操䜜を実装する必芁がありたすが、厳密な数孊的構造をそれに関連付けるのは間違いだず思いたす。これは、䞀郚のアプリケヌションには適切でなく、その他。 これらのデヌタ構造ず挔算を䜿甚しお、アプリケヌションに数孊挔算を実装するのはナヌザヌの責任です。 z.' * A * zがスカラヌを返すアプリケヌションは確かにありたす。ここで、 zは耇玠ベクトルであり、 Aは行列ですが、これは内積や双察ずは関係ありたせん。ベクトル。

@jutho z.' * A * zナヌスケヌスを教えおいただけたすか

z1ずz2が2぀の耇玠ベクトルZ1ずZ2の衚珟である堎合たずえば、ケヌラヌ倚様䜓の接空間のホロモルフィック郚分の接線ベクトルおよびaは、2぀の共倉むンデックスたずえば、ケヌラヌ倚様䜓の耇玠数2,0圢匏ずA(Z1,Z2) = z.' * a * zを持぀テン゜ルAの行列衚珟です。

ここで匷調するのは、ゞュリアオブゞェクトz1 、 z2 、およびaは、遞択された基底/調敎に関しお特定の数孊的オブゞェクトの_衚珟_を圢成するだけであるずいうこずです。デヌタ構造に察する操䜜は、これらのデヌタ構造が䜕を衚しおいるかを知らない限り、数孊挔算に䞀意に関連付けるこずはできたせん。

@juthoありがずう。 衚珟に぀いおのあなたの指摘はよく理解されおおり、この議論では䜕床も衚珟されおきたした。 ベクトルず行列の最小むンタヌフェむスを芋぀けお、その最小むンタヌフェむスが配列の最小むンタヌフェむスず根本的に互換性がないかどうか、およびナヌザヌ定矩の抜象デヌタ型に䜕をオフロヌドできるかを確認しようずしおいたす。

この時点で、私は@StefanKarpinskiの提案に党面的に賛成です。これも、䞊蚘の@andyferrisによっおほずんど゚コヌされお

  1. APLスタむルのむンデックス䜜成
  2. v 'はある皮のCovectorたたはTransposeタむプを䞎えたす

他のすべおは詳现です。 row(M,i) col(M,i)関数ずM[i,:].'が必芁になるず思いたすか IIUC、 M[i,:]'は、この堎合は望たないconjたすか

はい、前回曞いたずきのAPLスタむルのむンデックス䜜成の良さを十分に理解しおいなかったこずを付け加えおおきたすが、今ではその倉曎を党面的にサポヌトしおいたす。 これにより、双察ベクトルがさらに魅力的になり、 row / col機胜したす。

それ以来、実装を詊しおみたしたが、最も混乱したのは、行列から抜出されたコベクトルが共圹であるかどうかでした 

マトリックスのリテラル倀を取埗したいず思いたす。 ディラック蚘法を䜿甚しお、任意の行列M = sum_i | i>を展開したす。䟋[0,0,1、...、0]、抜出したいU row(U,i)' = col(U’,i)を取埗したす。これは、固有分解から巊右の固有ベクトルを抜出するのに最適です。

アンディ

2015幎3月15日には、午前9時36分pmに、ゞェフBezansonの[email protected]は曞きたした

この時点で、私は@StefanKarpinski https://github.com/StefanKarpinskiの提案に党面的に賛成です。これも、䞊蚘の@andyferrishttps //github.com/andyferrisによっおほずんど゚コヌされおいたす。 特に

APLスタむルのむンデックス䜜成
v 'はある皮のCovectorたたはTransposeタむプを䞎えたす
他のすべおは詳现です。 rowM、i関数ずcolM、i関数を远加するず䟿利な堎合がありたす。 それ以倖の堎合、行をコベクトルずしお抜出するには、M [i 、]が必芁になるず思いたす。  IIUC、M [i 、] 'は、この堎合に望たれない接続詞を実行したすか

—
このメヌルに盎接返信するか、GitHub https://github.com/JuliaLang/julia/issues/4774#issuecomment-81228816で衚瀺しお

これに取り組み始めるボランティアはいたすか たずえば、 @ mbauman 、 @ jakebolewskiは、私が驚いたこずに、このスレッドにはただ含たれおいたせん:)

倉曎が必芁なものをすべお芋぀けるのは面倒かもしれたせんが、むンデックス䜜成の動䜜に察する基本的な倉曎はそれほど悪くないはずです。 おそらく、 @ jiahaoず@andreasnoackは、

これを進める前に、9、8のコメントは必芁ありたせん。

私はそれを手䌝うこずができたす。

私たちはかなり近いです

関連するコメントずしお、 TransposeずCTransposeラッパヌタむプがある堎合、それらもプレヌンなConjugateラッパヌタむプである必芁がありたす。たずえば、 conj(A)は次のようになりたす。たた怠惰です。 行列にBLASを乗算する堎合、特別なサポヌトがないため、これはあたり圹に立ちたせんBLASのCぱルミヌト共圹を意味したすが、完党なJulia BLAS実装がある堎合は、サポヌトするこずもできたす。 conj(A)*B明瀺的な掻甚なし。

私は、以前よりもベクトル転眮を真剣に受け止めおいるように感じたす。

おそらく、 @ andreasnoackず@simonbyrneは、6837を再怜蚎する必芁があるかどうかを教えおくれたす。

Transpose{Array} <: AbstractArrayがあっおはならないずいう@simonbyrneに同意したす。

その他の䞀般的な考え

  • 珟圚、倖積の蚈算には、「末尟のシングルトンディメンションを自動的に远加しない」ルヌルの䟋倖が含たれおいるこずに気付きたした。 uサむズが(n,)堎合、 u * u'は(n,) x (1, n)含む蚈算です。 この積は、最初の匕数を(n, 1)に自動的に再圢成しない限り、行列乗算の通垞の芏則を䜿甚しお蚈算するこずはできたせん。
  • MATLABむンデックスセマンティクスの「末尟のシングルトン次元を自動的に远加する」ルヌルは、「転眮がすべおの次元を逆にする」ルヌルず基本的に互換性がありたせん。 前者の芏則では、圢状(n,)配列は、圢状(n,1)や圢状(n,1,1)などの再圢成された配列ず意味的に同䞀です。ただし、転眮によっおすべおの次元が反転する堎合は、結果の配列の圢状は(n,) 、 (1, n) 、および(1,1,n)であり、末尟のシングルトンの远加のみが蚱可されおいる堎合、これらは同等ではありたせん。 これを論理的に極端に考えるず、配列の転眮は任意の数の_leading_シングルトンを持぀可胜性があるため、論理的に䞀貫性のないあいたいな圢状になりたす。

たた、文献調査を行い、いく぀かの興味深いAPLの歎史​​を明らかにしたした。 私たちがAPLむンデックス芏則ず呌んでいるものは、Iversonの1962幎の本にはありたせんでしたが、APL \ 3601968; APLの最初の実装には存圚しおいたした。 ただし、APL \ 360は、スカラヌず1ベクトルを混同したした。これは、Haegi、1976たで文献で認識されおいなかった䞍敎合です。 倚次元配列の圢匏的セマンティクスに関する議論は、ブラりンの博士論文1972;埌にAPL2を蚭蚈に最初に登堎し、それらのセマンティクスを圢匏化する䞀連の䜜業に拍車をかけたした。

APL2に぀ながる開発の優れた調査は次のずおりです。

  • Karl Fritz Ruehr 「APLの拡匵に関する調査」。 APLに関する囜際䌚議の議事録、APL '82、277〜314ペヌゞ、ニュヌペヌク、ニュヌペヌク、米囜、1982幎。ACM。

玢匕付け芏則に泚意が払われおいるこずに぀いお、文献で泚目に倀するのは次のずおりです。

  • T.もっず。 「配列の理論のための公理ず定理。」 IBM Journal of Research and Development、173月135–175、1973。

    • Quineの公理的集合論を䜿甚しお倚次元配列のセマンティクスを圢匏化する巚倧な曞物で、APLの文献で「浮動配列」ず呌ばれるものを構築するために、自己完結型集合の抂念を䜿甚しおスカラヌをランク0配列ずどのように融合できるかを瀺しおいたす。 [1] == 1、[1]= 1の「接地配列」ずは察照的。1980幎の修士論文でのSheilaM。Singletonによる埌の研究では、Moreの配列理論も接地配列の蚘述に適合できるこずが瀺されたした。

    • さらに、配列のセマンティクスをガむドするための重芁なルヌルずしお、スカラヌを返す内積に぀いおも蚀及しおいたす。

    • さらに、䞀般的な倚次元配列の「アップ/ダりンネス」の凊理の耇雑さをほのめかしたす。

      「Vを䜓䞊の倚元環ずするn次元ベクトル空間ずしたす。反分散ず共分散の考慮を無芖するず、V䞊の䟡数qのテン゜ルは、長さqのリストVV ... Vの盎積のベクトルぞの倚重線圢マッピングです。空間。Vに底がある堎合、V䞊の䟡数qのテン゜ルは、それぞれ長さnのq軞䞊の配列である_componentテン゜ル_で衚すこずができたす。」

  • G.ルむス。 「APLの新しいアレむむンデックスシステム」、APLに関する第7回囜際䌚議の議事録-APL '75、234-239、1975。

    • このペヌパヌは、むンデックス䜜成操䜜でむンデックスタプルをAPLのファヌストクラスオブゞェクトずしお提唱した最初の論文であり、むンデックスタプルの各ランクに沿った䜓系的なデカルト積によっおむンデックス䜜成の結果の䞀貫した構築を実珟できるこずに泚目したした。

  • ハンスRヘギ。 「ツリヌのようなデヌタ構造ぞのAPLの拡匵。」 ACM SIGAPL APL Quote Quad、728–18、1976。

    • この論文は、スカラヌず1配列を混同した、叀兞的なAPL \ 360の䞍敎合に぀いお䞍満を述べ、APLむンデックスルヌルではこの混同が成り立たないようにする必芁があるず䞻匵したした。

    • この論文には、1975幎のルむスず非垞によく䌌た構造も含たれおいたす。 仕事は独立しおいるようです。

  • JAGerthずDLOrth。 「APLでのむンデックス䜜成ずマヌゞ。」 APLに関する囜際䌚議の議事録、APL '88、156〜161ペヌゞ、ニュヌペヌク、ニュヌペヌク、米囜、1988幎。ACM。

    • APLむンデックス付けルヌルは、むンデックス付けを、むンデックスセットを倀セットにマッピングするブロヌドキャスト操䜜ず考えるこずで正圓化できるこずに泚意しおください。 この機胜的解釈は、圓然、ランク保存芏則ずルむスずヘギのデカルト構造を瀺唆しおいたす。

たた、「末尟のシングルトンディメンションを远加できる」ルヌルがないず、アむデンティティに埓わない

image

巊偎はスカラヌトレヌスの定矩によるであり、右偎は圢状(1, n) x (n, n) x (n,) = (1,)です。 逆に、このアむデンティティは、ベクトル転眮セマンティクスを遞択するための指針ず芋なすこずができたす。 重芁な点は、最初のIDを定矩するトレヌス操䜜の埪環プロパティです。 トレヌス内の量は、スカラヌたたはマトリックスのいずれかである必芁がありたすベクトルのトレヌスは定矩されおいたせん。 Avv'はすでに明確に行列です (Av)v'ずA(vv')は同じ結果を生成したす。 しかし、2番目の量からも、 v'Avは行列たたはスカラヌでなければなりたせん。 スカラヌの堎合、2番目のIDも保持されたす。 v'Avは、「末尟のシングルトン次元を远加できる」ルヌルがアクティブな堎合にのみ1ベクトルになりたす。この堎合、透過的に1x1行列に再圢成できたす。

したがっお、トレヌスを定矩する堎合は、必然的に、倖積vv'および2次圢匏v'Avの蚱容圢状に制限が課せられたす。

@jihao あなたが私たちに察しお䜕を䞻匵しおいるのかよく

あなたの議論のいく぀かは、転眮をすべおの次元を逆転させるずは考えられない立​​堎を匷化するために取るこずができるず思いたす列ベクトルは列ベクトル、たたはおそらく任意の数の先行シングルトン次元を持぀配列に転眮されたす。 行列代数ずの䞀貫性を保぀には、代わりに最初の2぀の次元を亀換するものず芋なす必芁があるず思いたす。 そうすれば、あなたが述べおいる矛盟のいく぀かは消えるず私は信じおいたす。 うたくいけば、転眮時にシングルトン次元を远加しないず、残りは消えたすコベクトルの最初の次元がないこずはカりントされたせん。

䞊蚘の私の䞀般的なコメントは、これらのルヌルを支持するこずではなく、配列むンデックスルヌルの蚭蚈空間ず線圢代数のアむデンティティずの盞互䜜甚を描写するのに圹立぀こずです。

「末尟のシングルトン次元を远加できる」ルヌルはMATLABで䜿甚され、@ alanedelmanによるず倚次元配列をサポヌトするために導入されたした。 MATLAB配列で䜿甚されるむンデックスからオフセットぞの蚈算は、 sub2indで定矩されたす。これは、末尟の1をいく぀スロヌしおも、同じ線圢むンデックスを返したす。 さらに、MATLABのマトリックスむンデックス䜜成ドキュメントには、むンデックス䜜成操䜜

1に等しい末尟の添え字を含たない、Bに指定された添え字の数は、ndimsBを超えたせん。

より正匏には、次のように述べるこずができるず思いたす。

配列を入力ずしお受け取る操䜜の堎合、 (n,) -arrays、 (n,1) -arrays、 (n,1,1...)配列は、これらの操䜜の有効な匕数であるずいう点で、すべお同じ等䟡クラスにありたす。  n=1堎合、同倀類にはスカラヌも含たれたす。

䟋

  • A*bおよびA\bここで、 Aは行列であり、 bはベクトルたたは行列 n x 1行列ず同じセマンティクスです。
  • hcat(A, b)ここで、 Aは行列で、 bはベクトルたたは行列です。

倖偎の補品の䟋を陀いお、ほずんどの堎合、Juliaにはこの「末尟のシングルトンディメンションルヌルを远加できたす」ルヌルがありたせん。 他にもあるかもしれたせんが、今は思い぀きたせん。

Transpose{A<:AbstractArray}がAbstractArrayサブタむプでない限り、問題はないず思いたすただし、皆さんほど考えおいないので、䜕かを芋萜ずしおいる可胜性がありたす 
ず

typealias AbstractVectorTranspose{A<:AbstractVector} Transpose{A}
typealias AbstractMatrixTranspose{A<:AbstractMatrix} Transpose{A}
typealias AbstractTMatrix Union(AbstractMatrix, AbstractMatrixTranspose} 

そしお同様にCTranspose 

AbstractVectorTranspose * AbstractVector = Number
AbstractVector * AbstractVectorTranspose = AbstractMatrix
AbstractVectorTranspose * AbstractTMatrix = AbstractVectorTranspose
AbstractTMatrix * AbstractVector = AbstractVector
AbstractTMatrix * AbstractTMatrix = AbstractTMatrix

唯䞀の未解決の質問は、 AbstractTMatrix最初のサむズが1の堎合にAbstractVector * AbstractTMatrixをサポヌトする必芁があるかどうか、たたはAbstractVector * AbstractVectorTransposeで十分かどうかです。

たた、新しい型システムは、これらのtypealiasずunionいく぀かをもう少し泚意深く衚珟するのに圹立぀かもしれたせん。

たた、たずえばv.'*Aが(A.'*v).'ずしお蚈算される堎合、 A自䜓がたずえばA=B'あれば、 Conjugateラッパヌの必芁性がポップアップしたす。 。

Transpose{Array} <: AbstractArrayがあっおはならないずいう@simonbyrneに同意したす。

そこで詳しく説明しおいただけたすか https://github.com/JuliaLang/julia/issues/4774#issuecomment -59428215での意芋は、CoVectorはAbstractVectorのサブタむプであっおはならないずいうものだず思いたしたが、 Transpose{Matrix} <: AbstractArrayがないのは少し奇劙に思えたす。

CoVectorは、 Vectorが列行列ずしおMatrix倉換され、 CoVectorこずを陀けば、ほずんどVectorように動䜜するはずです。 CoVectorは、行行列ずしおMatrix CoVector倉換されたす。

これは、コベクトルぞのむンデックス䜜成が行行列ぞのむンデックス䜜成ず同じように機胜するこずを意味するず思いたすか

それは興味深い考えです。 転眮/共ベクトル型で_leading_シングルトン次元のみがドロップされた堎合、物事はより簡単たたはより耇雑になりたすか

私は興味を持っおこの問題をフォロヌしおきたしたが、私の線圢代数は十分に錆びおいるので、貢献する資栌があるずは感じおいたせん。

@mbauman 

転眮/共ベクトル型で先頭のシングルトン次元のみが削陀された堎合、事態はより簡単たたはより耇雑になりたすか

任意の数の先行シングルトン次元を蚱可するず、配列むンデックスは適切に順序付けられなくなり、「最初の」次元のようなものはなくなりたす。これは、公理ずしお適切な順序付けを行うのに十分なほど奇劙です。

@tkelman 

4774コメントの意芋は、CoVectorはAbstractVectorのサブタむプであっおはならないずいうものだず思いたしたが、Transpose {Matrix} <AbstractArrayがないのは少し奇劙に思えたす。

この問題は、配列セマンティクス10064を参照を線圢代数セマンティクスから分離し、混合されおいる堎所を探すこずに関するものであるこずが完党に明らかになりたした。

  • 配列のセマンティクスは、size、length、getindex、setindex、hcat、vcat、reshape、rot90などの関数によっお定矩されたす。
  • 線圢代数のセマンティクスは、+、-、*、/ 、、 '、trace ..などの関数によっお定矩されたす。

cat関数をAbstractArrayの基本的なむンタヌフェむスの䞀郚ずしお定矩するず、連結動䜜が異なるため、 Transpose{<:AbstractArray}は明らかにAbstractArrayはありたせん。 。 圢状ずむンデックス付けのみが重芁なむンタヌフェむスの䞀郚であるず考えるず、状況はあたり明確ではありたせん。

我々はの重芁なむンタフェヌスの䞀郚ずしお連結を必芁ずする堎合はAbstractArray 、正圓化するこずも容易になる理由のようなタむプのSymTridiagonalされおいないAbstractArray以䞊の連結挔算以来の、 SymTridiagonalのようなS [SymTridiagonal(randn(5), randn(4)) randn(5)] 、珟圚定矩されおいたせん。

@toivoh 

これは、コベクトルぞのむンデックス䜜成が行行列ぞのむンデックス䜜成ず同じように機胜するこずを意味するず思いたすか

Transpose{Vector}むンデックス䜜成動䜜は、通垞のVectorず同じである必芁があるこずを瀺唆するIDがありたす。 数倀型の堎合、 v[1]はv' * e₁ = v ⋅ e₁ず同じ結果を生成し、 v[1:2]はv' * [e₁ e₂]ず同じ結果を生成するこずを考慮しおください。ここでe₁は正芏基底Vector{Int} [1, 0, 0, ...]およびe₂は[0, 1, 0, 0, ...]です。 むンデックス付け、内積、転眮に関連するこれらのアむデンティティを保持する必芁がある堎合は、次のように䞻匵できたす。

(v')[1] == (e₁' * v'') == (v' * e₁)' == (v ⋅ e₁)' == conj(v ⋅ e₁)* = conj(v[1])

最初のステップは新しい公理であり、4番目のステップはスカラヌの転眮がノヌオペレヌションであるずいう事実を利甚したす Transpose{Vector}ぞのむンデックス付けは本質的に転眮を無芖し、 CTranspose{Vector}ぞのむンデックス付けを行いたす

この問題は、配列セマンティクス10064を参照を線圢代数セマンティクスから分離し、混合されおいる堎所を探すこずに関するものだず私は思いたす。

  • 配列のセマンティクスは、size、length、getindex、setindex、hcat、vcat、reshape、rot90などの関数によっお定矩されたす。
  • 線圢代数のセマンティクスは、+、-、*、/ 、、 '、trace ..などの関数によっお定矩されたす。

その芳点に+1し、 Transpose <: AbstractArray持たないようにしたす。 たた、covectorにむンデックスを付ける堎合は、単䞀のむンデックスを䜿甚する必芁がありたす。そうしないず、covector * vector単䞀のむンデックスで瞮小の結果がスカラヌむンデックスがれロのオブゞェクトになるこずがないためです。

@jihao なぜ私たちが必芁なのか、欲しいのかわかりたせん

(v')[1] == (e₁' * v'')

新しい公理ずしお。 コベクトルが行行列ずしおむンデックス付けされる堎合でも、線圢むンデックス付けにより、䞊蚘ず同じ結果が埗られるず思いたす。

そしお、線圢代数に関係するものずしお共ベクトルを芋るこずに+1。

しかし、 SymTridiagonalずの連結を定矩すべきではない理由はありたせんよね

配列の@toivoh線圢むンデックス付けは、最初に配列をベクトルに再圢成し、次に新しいベクトルにむンデックスを

線圢むンデックス付けはストレヌゞの順序に関するものだず思いたしたが、ベクトルの線圢むンデックス付けには他に賢明な順序はありたせんよね スペルミスに぀いおは申し蚳ありたせん。

蚘憶には、独特の賢明な暪断順序はありたせん。 Fortran配列の堎合でも、芁玠を列メゞャヌ、行メゞャヌ、たたは逆列メゞャヌの順序で栌玍するこずを遞択できたすこれは元のIBM Fortran Iコンパむラヌが行ったこずずたったく同じです。 さらに、配列ずしお䜿甚でき、トラバヌサル順序のオプションがさらに倚い詊行などの他のデヌタ構造10064を参照がありたす。

ベクトルず行列に぀いおも同じこずが蚀えたす。 線圢むンデックスは、列行列ずその転眮に察しお同じ順序でそしお列ベクトルの堎合ず同じように芁玠にアクセスするので、なぜコベクトルが異なる必芁があるのですか もしそれが違うずしたら、コベクタヌのむンデックス付けをたったく定矩しないはずだず思いたす。

@toivohはい、同じ定矩が通垞の配列にも

Transposeオブゞェクトのむンデックス䜜成

線圢代数関数の倚くの玔粋なJulia実装は、転眮にむンデックスを付けたいず思うでしょう。 関係する2぀の行列の可胜なケヌス通垞、転眮、ctranspose、conjを区別する必芁がなく、通垞の行列ずしお扱う堎合は、玔粋なJulia行列乗算非BLAS数型の堎合を簡単に蚘述できたす。 キャッシュを無芖する方法を詊しお、ある皋床ロヌカルなメモリアクセスパタヌンを取埗するこずができたす。

そうだね。

@Jutho 同意したす。 そしお、そこに収たるように、コベクトルは行行列のようにむンデックスを付ける必芁がありたすよね

@toivoh 、もしあなたが圌らが前に䜙分なむンデックス1を持っおいるべきだずいうこずを意味するなら、私は同意せず、それが私の声明によっおどのように暗瀺されおいるのかわかりたせん。 私はマトリックスマトリックス補品に぀いおのみ話しおいたした。 Matrix * vectorたたはcovector * matrixは、メモリアクセスパタヌンが異なるだけでなく、戻り倀の型Matrix_vector = vectorたたはcovector_matrix = covectorも異なるため、異なる関数定矩を必芁ずする異なるメ゜ッドであるため、これらのものを混ぜないずいうゞュリアの非垞に実甚的な理由。

䞀般に、私は、N次元配列にむンデックスを付けるずきにむンデックス1を远加する機胜や、たずえばVecOrMatタむプの゚むリアスの倧ファンではありたせん。 これにより、ずさんなプログラミングが可胜になりたすが、それが間違いを犯したり、他の間違いをより遅く怜出したりするのを容易にする理由でもありたす。 倚重線圢オブゞェクトずしお䜿甚しおいる堎合は正確なNむンデックスを䜿甚し、テン゜ル積でベクトルずしお䜿甚しおいる堎合は線圢むンデックスを䜿甚しお、N次元配列をinexする2぀の䟿利な方法しかありたせん。スペヌスたずえば、そのような2぀の配列を远加したり、スカラヌを乗算したりする堎合。 私の䜿甚方法にはそれで十分ですが、それは他の人に限定されおいるこずを受け入れるこずができたす。

@Jutho 

これが私たちがやろうずしおいるこずを説明し、いく぀かの公理を䞎える詊みです

出発点は行列代数行列のみに基づくであるずいうかなり明確なコンセンサスに到達したず思いたす。 ほずんどの操䜜では、玔粋なマトリックス蚭定での動䜜がわかっおいたす。

私たちがやろうずしおいるのは、玔粋な行列蚭定を䞀貫した方法で拡匵および改良しお、真のスカラヌずベクトルも持぀ようにするこずです。䞀貫性のために必芁ず思われるため、コベクトルです。

これがスカラヌずベクトルの私の芋方です玔粋な行列の芳点から芋た堎合スカラヌは行列であり、そのタむプによっお1 x 1に制玄されたす。ベクトルは、そのタむプによっお次のように制玄される行列です。 be nx 1コベクトルは、そのタむプによっお1 x nに制玄される行列であるず以䞋で議論したす。この芳点から、2぀の公理を䞎えるこずができたす:(以䞋ではあたり正匏には説明されおいたせん

  • 拡匵行列から行列ぞの関数を考えおみたしょう。 特定のタむプの入力が䞎えられた堎合に、特定の次元でサむズ1の出力行列を垞に生成する堎合、その事実は出力のタむプに゚ンコヌドされたすスカラヌ/ベクトル/コベクトルになりたす。
  • 改良玔粋な行列蚭定で行列匕数を取る関数が、入力のサむズを1぀以䞊の次元で1にする必芁がある堎合、この事実が型に゚ンコヌドされおいない入力の受け入れを拒吊するこずがありたす。

䞊蚘に同意する堎合、ベクトルの転眮は䞊蚘の皮類の共ベクトルでなければなりたせん。anx1行列の転眮は、1xn行列を生成したす。 結果の最初の次元に沿ったサむズが垞に1であるずいう事実を゚ンコヌドするず、䞊蚘のようにコベクトルが埗られたす。

行列代数の芳点から始める堎合、あなたの蚀うこずは正しいです。 これは、MATlabがおそらく完党に実装しおいるモデルです。 すべおがマトリックスです。 これは閉鎖系であり、行列に察するすべおの操䜜で新しい行列が生成されたす。

この問題のポむントベクトルは単なる行列ではないため、ベクトルの転眮を真剣に受け止めるは、その行列代数モデルから離れるこずであるずいう印象を確かに持っおいたした。理由により、1x1行列から数倀を分離したい堎合に矛盟が衚瀺されるためです。効率の。 次に、線圢代数のモデルに埓うこずもできたす。このモデルでは、フィヌルドスカラヌ、ベクトル空間およびそれに察応するデュアル、および線圢挔算子/倉換行列の空間が明確に区別されたす。

Juliaの線圢代数挔算は、スカラヌずベクトルを持ち、ナヌザヌを二床ず掚枬しようずしないなどのいく぀かの泚目すべき䟋倖を陀いお、MATLABの䌝統にかなり匷く根ざしおいるず思いたす。 それから離れすぎおいるものは、おそらく非垞に倧きな混乱です。

䞊蚘の私の公理は、スカラヌずベクトルを行列から分離したいずきに珟れる䞍敎合を解決するために圹立぀はずだず私は信じおいたす効率ず正確さの理由から。 しかし、私は他の可胜なシステムに぀いお聞いお間違いなくオヌプンです。

ここで@Juthoに同意したす。 この問題の党䜓的なポむントは、MATLABの「すべおがマトリックスである」セマンティクスから離れるこずです。 宇宙は、線圢代数挔算の䞋で閉じられるようにするためにMATLABの「シングルトンの寞法を末尟に远加するこずができたす」ルヌルが必芁であるが、そのルヌルの定矩は、タむプのメンバヌを含むクラス同倀Tずタむプの他のArray{T,N}に぀いおすべおNであり、MATLABの型システムが決定䞍胜である䞻な理由です。  Joisha and Banerjee、2006の定理1を参照しおください。結果は圢状で瀺されおいたすが、問題は、配列ランクを倉曎するずプログラムのセマンティクスがどのように倉曎されるかずいうこずです。

しかし、スカラヌ、ベクトル、コベクトル、および行列の乗算は連想的である必芁があるずいうこずに぀いおは、ただかなり良いコンセンサスがあったず思いたすただし、2぀の非スカラヌが乗算しおスカラヌを生成する(v'*v)*vなどは䟋倖です。たずえば、 v'*M*vはスカラヌ、 M*vはベクトル、 v'*Mはコベクトルを生成する必芁がありたす。 これらの条件を満たす䞀方で、すべおがマトリックスのセマンティクスからどれだけ離れるこずができるかはわかりたせん。
これ以䞊避けようずしおいるこずは䜕ですか代わりにどのプロパティを取埗したいですか

堎合によっおはTずArray{T,0}だけを混同するずしたら、どれほど悪いこずでしょうか。 䟋むンデックス䜜成 M[:,2]はArray{T,1}を生成したすが、 M[2,2]はArray{T,0}生成したせん

Transpose{Vector}を䜿甚しおも、有効なセマンティクスを維持できたす。

私は結合性に関するすべおのコメントを読み盎し、その議論のほずんどは実際には結合性自䜓に関するものではなく、内積ず倖積のセマンティクスに関するものであるず結論付けたした。 どちらにも圓おはたらない衚珟を芋぀けたら、それを指摘しおください。

Matlabタむプのセマンティクスの問題は、 M*v'ずv*Mが機胜しない堎合でも機胜する堎合があるこずです。 Mがm x 1堎合、 M*v'は有効であり、倖積のような数量を返したす v'は1 x n 。 同様に、 Mが1 x mあり、「末尟のシングルトンを远加できる」ルヌルがある堎合、 v*Mはn x 1ず1 x mの積ずしお評䟡できたす。

TずArray{T,0}を混同する問題は、APLの文献でも提起されたした。APLでは、倚次元配列が再垰的にネストされおいるため、 Array{T,0}ずTのどちらであるかずいう問題が発生したす。 Tたで再垰するであり、そうでない堎合は「浮動配列」 Array{T,0}のみたで再垰するです。 More、1973は、どちらの遞択も公理的に䞀貫しおいるこずを実際に蚌明したず思いたす。 ほずんどの開業医が匕退するか、他の䜕かに移る前に、APLがどちらを䜿甚するかずいう問題を解決したかどうかはわかりたせん。

@jiahao あなたの芳察がどれほど基本的であるか私は

v[i] = e_i' * v

線圢代数ずむンデックス付けのセマンティクスを結び付けたす。 しかし、あなたはたた考慮する必芁がありたす

M[i,j] = e_i' * M * e_j

これは、右からの基底ベクトルを持぀内積が2次元に沿ったむンデックス付けに察応するこずを瀺しおいたす。 したがっお、コベクトルv'のi番目の゚ントリは次のようにむンデックス付けする必芁があるず䞻匵したす。

v' * e_i = v'[1, i]

もちろん、最初のむンデックスずしお1以倖のものを曞きたいのですが、どうでしょうか。
ずにかく、蚱可するので

e_i' * v = v[i] = v[i, 1]

その堎合、䞊蚘の堎合も1をプレヌスホルダヌずしお蚱可する必芁がありたす。

ただし、 v' * e_iはスカラヌであるため、 e_1' * (v' * e_i)はスカラヌではなく、共ベクトルです。 したがっお、寞法はv'[1, i] = e_1' * v' * e_iを考えるず䞀臎したせん

線集これは、むンデックス䜜成で末尟のシングルトンを蚱可するこずに反察する議論かもしれないず思いたすか

はい、行列のむンデックス付けは次の論理的なステップです。 e_i' * M * e_jは、実際には結合法則が圹立぀匏の1぀です。

(e_i' * M) * e_j = m_i' * e_j

e_i' * (M * e_j) = e_i' * m_j

等しくなければなりたせん。 行列のむンデックス付けは、ベクトルむンデックス付けルヌルずコベクトルむンデックス付けルヌルから導出できたす。

この問題を䞀貫しお解決するには、 v[i, 1]ような匏を犁止する必芁があるず思いたす。これは、このむンデックス䜜成動䜜を蚱可するルヌルがあるためです。
a A*v'ずv*A疑䌌ケヌスが機胜するはずです前者は機胜したすが、埌続のシングルトンルヌルを䞀貫しお適甚しないため埌者は機胜したせん。
b v[i] = v[i, 1, 1, 1]の同等性を考慮するず、察応するコベクトルむンデックスルヌルは(v')[1, 1, 1, i]ようになり、䞀貫性を保぀ために、コベクトルに察応する「任意の数の先行シングルトンを蚱可する」ルヌルが必芁です。 独自に定矩された䞀次元の欠劂は非垞に気がかりです。

このむンデックスの掚論は実際にはどこにも行かないず思いたす。 むンデックス付けはN次元配列の䞀般的なプロパティであり、 N=1たたはN=2単玔な行列匏ずしお蚘述できるこずは、かなり些现なこずであり、基本的なものは含たれおいたせん。情報。 ただし、これは䞊䜍の配列に䞀般化されないため、むンデックスを䜜成するずきにコベクトルに先頭の1が必芁かどうかを刀断するために䜿甚しないでください。 これは、以前の投皿で芳察されたように、すぐに䞍敎合に぀ながりたす。

䞊で述べたように、私は1぀のむンデックスを远跡するこずに䟝存するのが奜きではなく、それが必芁であるか、たたは本圓に圹立぀単䞀の状況を考えるこずができたせんでした。 しかし、私の芖点はあたりにも限られおいるこずを受け入れるこずができたす。

私はこれらすべおを完党に消化しおいたせんが、私の䞻な質問は単玔です size(covector)は(n,)たたは(1,n)等しいですか

それらがAbstractArrayファミリヌの䞀郚でない堎合、 sizeを定矩する必芁はありたせん。

実甚的な理由から数字などのように定矩されるず思いたすが、私の投祚は(n,)たす。 ストレヌゞ/コンテナの芳点からは、ベクトルずコベクトルの区別はありたせん。 したがっお、コベクタヌをコンテナヌずしお䜿甚する必芁もありたせん。したがっお、コベクタヌはAbstractArray階局に属しおいたせん。 線圢代数挔算に関しお、ベクトルずは異なる動䜜をするこずを衚珟するのは、単玔なラッパヌタむプです。

「代数ず幟䜕孊が分離されおいる限り、それらの進歩は遅く、それらの䜿甚は制限されおいたす。しかし、これらの2぀の科孊が統合されたずき、それらはそれぞれの盞互の力を貞し、完党に向かっお䞀緒に行進したした。」 -ゞョセフ・ルむ・ラグランゞュ

もっず貢献できればいいのですが、物理孊者や技術者が䜿う掗緎された数孊的ツヌルを盎感的で正確に䜿えるシステムが奜きだず思いたした。 おそらく、MITからのこのリ゜ヌスは圹に立぀かもしれたせん...

http://ocw.mit.edu/resources/res-8-001-applied-geometric-algebra-spring-2009/lecture-notes-contents/

実際、考えおみるず、もっず公平だず蚀えたす

e_i' * x = x[i, :] # x is a vector or matrix
x * e_j  = x[:, j] # x is a covector or matrix

次に、マトリックスのむンデックス䜜成では、

e_i' * M * e_j = e_i' * (M * e_j) = e_i' * M[:, j] = M[:, j][i, :] = M[i, j]
e_i' * M * e_j = (e_i' * M) * e_j = M[i, :] * e_j  = M[i, :][:, j] = M[i, j]

珟圚、これはJuliaには圓おはたりたせん。たずえば、 v[i, :]珟圚、スカラヌではなく1x1配列を生成したす。 しかし、倚分それはすべきではありたせん
e_i' * M * e_jでの行列乗算の結合性は、さたざたな次元M[:, j][i, :] = M[i, :][:, j]に沿ったスラむスの可換性に察応したす。これは、望たしい機胜のようです。
䞊蚘の理由により、

v'[:,i] = conj(v[i])

@Jutho この「繰り返しスラむスずしおのむンデックス䜜成」パラダむムは、より高次元の配列/テン゜ルに䞀般化するず思いたす。各次元に1぀のスラむスを任意の順序でむンデックスに適甚したす。 これは、 e_iなどに察応する1次テン゜ルが任意の順序である䞀連の収瞮に察応したすどの次元が䞀臎するかを远跡しおいる限り。

この「繰り返しスラむスずしおのむンデックス䜜成」パラダむムは、より高次元の配列/テン゜ルに䞀般化するず思いたす。各次元に1぀のスラむスを適甚しお、任意の順序でむンデックスを䜜成したす。 これは、e_iなどに察応する1次テン゜ルを任意の順序で䜿甚する䞀連の瞮玄に察応したすどの次元が䞀臎するかを远跡しおいる限り。

はい、私はテン゜ルの瞮玄などに非垞に粟通しおいたす。実際、行列芁玠/テン゜ル芁玠を取埗するこずは、暙準の蚈算基底で期埅倀を取埗するこずに察応したす。぀たり、いく぀かの基底ベクトルで収瞮したす少なくずも盎亀基底がある堎合。 が、むンデックスがe_iたたはe_i'瞮小に察応するかどうかに関しお䞀意の関連付けはありたせん。 これは、察応するむンデックスが共倉たたは反倉の䜍眮に衚瀺されるかどうかの決定に察応し、䞀意の決定はありたせん。 䞊䜍むンデックスず䞋䜍むンデックスのすべおの可胜な組み合わせには、有甚なアプリケヌションがありたす。 しかし、 e_iおよびe_i'ずのn x 1行列で導入された䟿利なトリックであり、共圹からの正芏マッピングがあるナヌクリッド空間にいるためにのみ機胜したす ベクトル空間を双察空間に。

特に、䞊蚘で説明したプロパティが必芁な堎合は、 M[i,:]が別のオブゞェクト 1xn行列たたはコベクトルを返し、次にM[:,i]返すようにする必芁がありたす nx1行列たたはベクトルである。 これはきれいに高い次元に䞀般化されおいないずいう事実は、たさにこの問題の䞻芁な論点の䞀぀であり、ほずんどの人はAPLのむンデックス䜜成に賛成しおいるように思える、番号でむンデックスさ寞法がドロップされおいる堎合すなわち、䞡方のM[:,i]ずM[i,:]は、ランク1の配列、぀たりベクトルを生成したす。 むンデックス付けは配列のプロパティであり、最初にすべおの混乱/䞍敎合を匕き起こすのは、むンデックス付けの動䜜ず線圢代数挔算のこの混合です。 ランクN=2オブゞェクトの閉じた゚コシステム内にずどたる限り、䞀貫性を保぀こずができたす。぀たり、すべおが行列であり、ベクトルず数倀であり、高次元の配列を考慮するこずはありたせん。

あなたが蚀うように、私はたた、 M[i,:]が䞊蚘の私の掚論によっお共ベクトルを生成しなければならないこずに気づきたした。 したがっお、コベクトルを持぀こずは、あるレベルではAPLむンデックス付けず根本的に矛盟しおいるようです。 APLむンデックス䜜成を奜む堎合そしお私はそれが奜きです、問題は、その䞖界ずコベクタヌが存圚する䞖界ずの間に線を匕く堎所になりたす。 私は2぀を調敎するこずが可胜になるこずを望んでいたした、倚分あなたの残りは私達がそれをあきらめなければならないこずにすでに気づいおいたしたか

あなたがそれに぀いお考えるならば、この察立はおそらくそれほど驚くべきこずではありたせん

  • APLむンデックス䜜成では、意味のあるむンデックス䜜成可胜なディメンションのみが結果に保持されたす。 残りは絞り出されたす。
  • v'それを行うずするず、 v' = conj(v)たす。 代わりに、コベクトルは欠萜しおいる最初の次元を远跡しおいるず芋なすこずができたす。

基本的には、乗算、加算/枛算、および巊陀算を定矩するだけで、コベクトルを可胜な限り制限するこずから始めるのがよいず思いたす。

それらを<: AbstractArrayしないずいう考えのようです。 それらを新しいLinearOperatorタむプのサブタむプにするこずは意味がありたすか 私が知っおいるこずは以前に議論の䜙地がありたしたが、結論を完党に芚えおいたせん。

倚重継承やむンタヌフェヌスの蚀語構築どちらも議論されおいたすがないため、特定の抂念は「暗黙の」むンタヌフェヌス、぀たり定矩する必芁のある䞀連のメ゜ッドによっおのみ実装される必芁があるず思いたす。 むテレヌタはそのような抂念の1぀であり、線圢挔算子はおそらく、型階局ではなく䞀連のメ゜ッドで指定する必芁がある別の抂念です。 抜象型LinearOperatorあり、そのサブ型ずなるMatrixがないのは奇劙なこずです。

@toivohこれは重芁な考慮事項です。これが、行列からi番目のベクトルたたはコベクトルを抜出するためにrow(M,i)やcol(M,i)などの新しい関数を提案した理由です。 これらの関数は、2次元配列Mず、行列代数に関心のある人向けです。 最初はMATLABスタむルのむンデックス付けよりも少しわかりにくいように思われるかもしれたせんが、党䜓ずしお、ベクトルの抂念ずそのデュアル/転眮/コベクトルを抂念的に分離するず、物事を明確にするのに圹立ちたす。 量子力孊の堎合、ベクトルず共ベクトルのこの区別が耇雑なベクトルにずっお非垞に重芁であるずいう理由だけで、フィヌルド党䜓がディラックのブラケット蚘法にゞャンプしたした。ディラックの蚘法はこれを明らかにしたす。 Juliaもこれを実行し、高次元のストレヌゞ配列ず高次元の線圢代数に適したツヌルになるこずを願っおいたす。 私たちは貪欲だからですよね

MATLABの経隓があり、ほずんどが実際の行列に粟通しおいる人ただし、ハヌドコアの線圢代数の狂信者ではないは、最初は、私たちの䜕人かが䞻匵しおいるこずが重芁である理由を理解しおいないかもしれたせんが、私は信じおください。

これは前に蚀いたしたが、繰り返したす。私の芳点からは、この優先順䜍のリストがあり、因果関係は䞋向きに流れおいたす。

1配列は基本的に、すべおのJuliaナヌザヌが䜿甚するストレヌゞコンテナヌであり、これに最適なセマンティクスが必芁です。 ずにかく、APLスタむルのルヌルは非垞に良い解決策のようです。 䞀方、MATLABスタむルの最小2次元配列で、末尟に1次元のむンデックスがある仮定は䞍自然で混乱しおいるように芋えたす。たた、Juthoが蚀ったように、プログラミングがずさんなこずになり、配列の次元。 これたでのずころ、ベクトルv堎合、 vは1次元であるため、コヌドv[i,:]ぱラヌをスロヌするはずです。 +や.*ような芁玠ごずの挔算は、行列や倚重線圢代数だけでなく、あらゆるコンテナクラスに圹立ちたす。 以䞋のもののために人々が䜜る唯䞀の譲歩ストレヌゞコンテナは、 .*などの䜙分なドットです。

2すべおではありたせんが、ほずんどのJuliaナヌザヌは行列代数を䜿甚するため、䞀郚のベクトルおよび行列挔算に構文糖衣構文を远加したす。ほずんどの堎合、 *蚘号を䜿甚したすただし、行列陀算などがある堎合がありたす。 このシステムでは、1次元配列ず2次元配列は、それぞれ列ベクトルず行列です。 完党に機胜する行列システムの堎合、行ベクトルコベクトルず転眮挔算'も必芁です。 行ベクトルはあらゆる意味で1次元配列であり、そのようにむンデックスを付ける必芁があるず断蚀したすそしお、確かにcovec[1,i]ずは異なりたす!!APLルヌルを䜿甚するず、いく぀かを䜜成する必芁がありたす。ベクトルずコベクトルの区別、および型システムはこれに理想的ですラッパヌ型ではなく、1次元および2次元配列の型゚むリアスずしお行列ずベクトルをすでに再利甚できたのは幞運でした...原則ずしお可胜でしたそれらもラップしたすが、芁点がわかりたせん。 型システムを䜿甚するず、コンパむラはCoVector * Vectorがスカラヌであり、 Vector * CoVectorが行列であるず刀断できたす。 toivohが蚀ったように、_MATLABの芳点から、CoVectorは「欠萜しおいる」最初の次元を正確に远跡しおいたす。_カゞュアルナヌザヌはこれらのオブゞェクトを䜜成する必芁はありたせん。 ベクトルず行列を入力し、 *ず'挔算を䜿甚したす。 気になる人はその違いに気づき、感謝するでしょう。 ナヌザヌにずっおの_最倧の_倉曎は、 M[i,:]を新しい関数row(M,i)䜿甚するように倉曎するか、 Transpose(M[i,:])やM[i,:]'ようなラッパヌクラスに倉換する必芁があるこずです-ディラック蚘法のように、どのオブゞェクトがベクトルで、どのオブゞェクトが共ベクトルであるかを決しお忘れないため、これは利点ず考えるこずができたす。タむプアサヌトを䜿甚しおオブゞェクトに割り圓おるず、必芁に応じお゚ラヌが発生したす。 ただし、この衚蚘に぀いおは議論する䟡倀があるず思いたす。 将来的には、ラッパヌのシステムを拡匵しお、効率的な遅延評䟡を可胜にする可胜性もありたす。 私が芋る限り、それは誰にずっおもお互いに有利です。

3倚重線圢代数に興味があり、双察空間ず転眮匏の違いなどを孊ばなければならなかった人もいたす。Juthoはこれに觊れおいたす。 Juliaの配列は、すでに高次元のテン゜ル甚の優れたストレヌゞデバむスであり、远加のパッケヌゞBaseに入る堎合ず芋぀からない堎合がありたすが私たちのような人々によっお䜿甚されたす。 2より倧きい次元の配列で定矩された'や*ような操䜜は必芁ありたせん。 むンデックスを明瀺的に䞊べ替えおも、よりクリヌンに実行できない'ストレヌゞ指向のナヌスケヌスは芋圓たりたせん。 1次元むンデックスを远跡するずいう党䜓的な考え方は、抂念の魅力を䜎䞋させるだけです...したがっお、MATLABのように1次元および2次元配列に察しおのみ'を保持しおください参照しおください。 MATLABに぀いお蚀う...

完党に機胜する行列システムの堎合、行ベクトルコベクトルず転眮挔算 'も必芁です。

この声明は本圓に問題の栞心に迫っおいたす。 むンデックス䜜成、転眮、および*補品はすべお混合されおいたす。 たた、さらにような関数を導入するこずなくcovectorsのものず行ベクトルの完党なセマンティクスを調敎するこずは䞍可胜であるrow(A, i)返すためにiの行をA Aずしお1次元配列ではなくコベクトル。 珟圚、 A[1, :]は、「Aの最初の行を取埗する」ず「Aの2番目の次元に沿っお最初のスラむスを取埗する」の䞡方を意味したいず考えおいたすが、これらの抂念は、コベクトル提案では基本的に互換性がありたせん。

行ベクトルは、あらゆる意味で1次元配列であり、そのようにむンデックスを付ける必芁があるず断蚀したす。

私はあなたがこの声明に少し気難しいず思いたす。 前の説明では、完党な線圢代数セマンティクス正しい積ず転眮を䜿甚が必芁な堎合、行ベクトルは1次元配列ず同じ型を持぀こずはできないこずを明確に確立しおいたす。 たず、コベクトルぞのむンデックス付けは、内積dotずの䞀貫性を保぀ために、耇玠共圹倀(v')[1] = conj(v[1])を返す必芁がありたす。 第二に、コベクトルはベクトルではなく、ベクトルで内積を生成するのを埅っおいる線圢汎関数です。 第3に、ベクトルず共ベクトルは、 hcatずvcat䞋で異なる配列連結動䜜をしたす。 これらすべおの理由から、行ベクトルを「あらゆる意味で1次元配列」にするこずはできたせん。

末尟のシングルトンを取り陀くこずに賛成です。それを利甚したJuliaコヌドを芋たこずがないず思いたす。 もずもずは0次元配列に必芁だず蚀っおいたしたが、 X[]は問題なく機胜するこずがわかりたした。

行ベクトルのrow(M,i)関数ずずもに、APLむンデックス䜜成が最も理にかなっおおり、適切な劥協点のように思われたす。 行ベクトルのむンデックス付けに぀いおはよくわかりたせんが、 (v')[1,i]は奜きではありたせん。

ただ觊れおいないもう1぀の倧きな決定は、タむプです。 以前にこれを詊しおみた私の1぀の発芋は、 v' AbstractVectorにするのは非垞に難しいずいうこずです。

2぀の可胜なオプション

  1. 行列ずベクトルに別々のタむプを䜿甚したす。

    • Transpose <: AbstractMatrix

    • CoVector <: Any

    • Factorizationオブゞェクトのある皮の転眮。

  2. すべおの転眮に同じタむプを䜿甚したすが、 X'はAbstractMatrixたせん

    • Transpose <: Any

接合に぀いおは、次のいずれかを行うこずができたす

a。 ConjugateTranspose定矩したす䞊蚘のオプション1を䜿甚する堎合はConjugateCoVectorずずもに

b。 Conjugateラッパヌタむプを䜿甚し、適切にネストしたす。 Transpose{Conjugate{T}}ずConjugate{Transpose{T}}どちらを䜿甚するかに぀いお、䜕らかの芏則が必芁になりたす。

AbstractMatrixサブタむプではなくTranspose{Matrix}を持぀のが奜きです。 私たちがベヌスに持っおいる最も近い類䌌物は、 Symmetricような特別な行列タむプであるず思いたす。これは、代数的に行列のように動䜜したすが、むンデックス付けのセマンティクスでは動䜜したせん。 987は、耇数の固有性たたは神聖な特性がない堎合、型階局は代数的セマンティクスよりもコンテナヌセマンティクスを尊重する必芁があるこずを確立したした。

基本的に「セマンティックタグ」である型を構成する問題は、8240にも珟れたした。 掻甚は芁玠の基瀎ずなる分野にたで及ぶ抂念であるため、 Transpose{Conjugate{T}}が望たしいず思いたす。

以䞋は、MATLABず同じ末尟のシングルトンルヌルに埓う堎合ず埓わない堎合の䟋です。

  • むンデックス付け操䜜では、末尟のシングルトンが蚱可されたす。 MATLABのように
julia> (1:5)[5,1,1,1,1,1,1]
5
  • むンデックス䜜成操䜜では、末尟のスラむスは蚱可されおいたせん。 MATLABずは異なり、MATLABはそれらを蚱可したす。
julia> (1:5)[5,:]
ERROR: BoundsError()
 in getindex at abstractarray.jl:451
  • ランク> = 3の配列の堎合、配列のランクよりもむンデックスが少なく、最埌のむンデックスがスカラヌMATLABなどの堎合、暗黙的な末尟のシングルトンがむンデックス付き代入挔算に远加されたす。
julia> A=zeros(2,2,2); A[1,2]=5; A #Same as A[1,2,1]=5
2x2x2 Array{Float64,3}:
[:, :, 1] =
 0.0  5.0
 0.0  0.0

[:, :, 2] =
 0.0  0.0
 0.0  0.0
  • ランク> = 3の配列の堎合、配列のランクよりもむンデックスが少なく、最埌のむンデックスがスカラヌではない堎合MATLABのように、暗黙の末尟の_slices_がむンデックス付き代入挔算に远加されたす。
julia> A[:,:]=3; A
2x2x2 Array{Float64,3}:
[:, :, 1] =
 3.0  3.0
 3.0  3.0

[:, :, 2] =
 3.0  3.0
 3.0  3.0
  • ランク> = 3の配列の堎合、配列のランクよりもむンデックスが少なく、最埌のむンデックスがスカラヌMATLABなどの堎合、暗黙的な末尟のシングルトンがむンデックス操䜜に远加されたす。
julia> A=reshape(1:8,2,2,2); A[:,1]
2-element Array{Int64,1}:
 1
 2

julia> A[:,1,1]
2-element Array{Int64,1}:
 1
 2
  • ランクr> = 3の配列の堎合、配列のランクよりもk <rのむンデックスがあり、最埌のむンデックスがスラむスである堎合のむンデックス䜜成操䜜は、残りのランクrk配列を暗黙的に線圢化したす。 MATLABのように
julia> A=reshape(1:8,2,2,2); A[1,:]
1x4 Array{Int64,2}:
 1  3  5  7

julia> A=reshape(1:8,2,2,2); A[1,:,:]
1x2x2 Array{Int64,3}:
[:, :, 1] =
 1  3

[:, :, 2] =
 5  7
  • 末尟のシングルトンは、割り圓お操䜜では削陀されたせん。 MATLABずは異なり
julia> A=zeros(1); A[1] = randn(1,1)
ERROR: `convert` has no method matching convert(::Type{Float64}, ::Array{Float64,2})

You might have used a 2d row vector where a 1d column vector was required.
Note the difference between 1d column vector [1,2,3] and 2d row vector [1 2 3].
You can convert to a column vector with the vec() function.
 in setindex! at array.jl:307

julia> A=zeros(1,1); A[1,1] = randn(1)
ERROR: `convert` has no method matching convert(::Type{Float64}, ::Array{Float64,1})
 in setindex! at array.jl:308
  • Juliaは、有効な操䜜を蚱可するずきに、末尟のシングルトンディメンションを自動的に远加したせん。 Matlabずは異なり
julia> 1/[1.0,] #In MATLAB, interpreted as the inverse of a 1x1 matrix
ERROR: `/` has no method matching /(::Int64, ::Array{Float64,1})
  • 倖積は機胜し、前のルヌルの䟋倖です。 それらのセマンティクスは、最初の匕数で末尟のシングルトンを暗黙的に䜿甚したす。 Matlabのように
julia> [1:5]*[1:5]' # Shapes are (5,) and (1,5) - promoting to (5,1) x (1,5) works
5x5 Array{Int64,2}:
 1   2   3   4   5
 2   4   6   8  10
 3   6   9  12  15
 4   8  12  16  20
 5  10  15  20  25

これらの動䜜をどのようにしたいかを結論付けたら、これらのこずは少しクリヌンアップする䟡倀があるようです。 最埌のむンデックスがスラむスであるむンデックスが少なすぎる堎合の珟圚の動䜜は、特に怪しいようです。

ワオ。 Jiahaoが提瀺した䟋は、非垞に厄介です...暗黙性ずあいたいさのために、むンデックス䜜成操䜜ずむンデックス付け割り圓お操䜜でシングルトンを远跡するのは奜きではありたせん。 これらの動䜜を事前に認識しおいない堎合、実際に別のこずを行おうずしおいるずきに、あるこずを実行しおしたう可胜性がありたす。 私は、蚀語の正確で明確な䜿甚法にコミットし、あいたいなショヌトカットを回避するこずに賛成です。

これを実際に実装するには、ある皮の䞉角圢のディスパッチが必芁になりたす。そうしないず、「 Complex64たたはComplex128゚ントリを持぀行列、その転眮」などをどのように衚珟するかわかりたせん。 、たたはその共圹転眮」。 特に䞊蚘のオプション2 + bを䜿甚する堎合。

@ esd100 、これらの

行ベクトルは、あらゆる意味で1次元配列であり、そのようにむンデックスを付ける必芁があるず断蚀したす。

私はあなたがこの声明に少し気難しいず思いたす。

本圓です 申し蚳ありたせんが@jiahao 、私は[]むンデックス䜜成の動䜜を厳密に参照しおいたした。 連結が重芁な考慮事項であるこずは正しいです。それを行う行列を䜜成する自然な方法はこの堎合は1 xnサむズず考えるこずでかなり明癜だず思いたす。 明らかに、コベクトルは「あらゆる意味で」1D JuliaArrayではありたせん...それが党䜓のポむントです...

ゞアハオの䟋も私を悩たせおいたす。 私は、可胜性のある埌続のシングルトンの動䜜を削陀するこずに賛成です。 埌の次元を線圢化するこずは有甚かもしれたせんが、配列の次元数を忘れるような怠惰を助長する可胜性もありたす...これは「あいたい」ず「危険」によっお暗瀺されるものだず思いたす...私は本圓に欲しいですたずえば、16次元配列を15次元配列のように扱うず、Juliaが゚ラヌをスロヌしたす。

これらのどれが曖昧たたは危険ですか

4぀目は、あいたいで危険なようです。

julia> A=zeros(2,2,2); A[:,:]=3; A
2x2x2 Array{Float64,3}:
[:, :, 1] =
 3.0  3.0
 3.0  3.0

[:, :, 2] =
 3.0  3.0
 3.0  3.0

明らかに私にずっおこれは構文゚ラヌであるはずです。 Aはランク3であり、3次元はたったく参照されおいたせん。 3番目の次元が゚ラヌによっお省略された可胜性が高く、芋぀けにくいバグがコヌドに導入されおいたす。 圌の時点で゚ラヌが発生したこずを感謝したすIDLずFortranの䞡方にあるため。

配列が正しいむンデックス数でのむンデックス䜜成のみを蚱可するか、1D線圢むンデックス䜜成の特殊なケヌス非垞に䟿利なためを蚱可するのが最善だず思いたす。 これには、埌続のシングルトンを犁止するこずも含たれたす。

たたは1D線圢むンデックスの特殊なケヌス非垞に䟿利なため

私たちの原則はどれほど簡単に売られたすか :)

私は線圢むンデックスがそれほど奜きではありたせんでした。 それはちょっずしたハックずしお私を襲いたす。 倚くの堎合、配列を反埩凊理するための最速の方法が必芁です。 たた、単玔な高密床配列を陀くすべおの堎合、線圢むンデックス䜜成は非垞に遅くなる可胜性がありたす。 ずはいえ、線圢むンデックスを完党に排陀するこずはできないかもしれたせんパフォヌマンス䞊の理由ず、コヌドの砎損が倚すぎるため。

はい、十分に真実です。 しかし、少なくずも1Dむンデックスは芖芚的に区別されたす。 䞀方、6D配列に5Dでむンデックスを付けるこずは、それほどではありたせん。 いずれにせよ、私は他の方向に進むよりも、より厳密なむンデックス䜜成ルヌルを持ち、1D線圢むンデックス䜜成をあきらめたいず思いたす。 特に、メモリを共有する配列ぞの再圢成された参照を簡単に取埗できるためです。

線圢むンデックス䜜成に{}角かっこたたはその他を䜿甚し、倚次元むンデックス䜜成に[]を保持できたすか ただのアむデア...

2015幎3月23日には、14:36で、ボブPortmannの[email protected]は曞きたした

はい、十分に真実です。 しかし、少なくずも1Dむンデックスは芖芚的に区別されたす。 䞀方、6D配列に5Dでむンデックスを付けるこずは、それほどではありたせん。 いずれにせよ、私は他の方向に進むよりも、より厳密なむンデックス䜜成ルヌルを持ち、1D線圢むンデックス䜜成をあきらめたいず思いたす。 特に、メモリを共有する配列ぞの再圢成された参照を簡単に取埗できるためです。

—
このメヌルに盎接返信するか、GitHub https://github.com/JuliaLang/julia/issues/4774#issuecomment-84805310で衚瀺しお

たた、構文を分離できたらいいのにず思いたす
通垞のむンデックス構文からの線圢むンデックスの堎合ですが、私はそれに同意したす
非垞に倧きな倉化かもしれたせん。

この問題は倚くの議論を呌んでいるように芋えたすが、むンデックス䜜成を改善するための実際の䜜業のほずんどは、0.4サむクル党䜓で非垞に倚くのプルリク゚ストで発生しおいたす。 たずえば、 CartesianIndexず友達ができたので、線圢むンデックスずデカルトむンデックスの構文を分離する必芁がある理由がわかりたせん---実際、それらを組み合わせるこずができたす10524。 線圢むンデックスも削陀したいのですが、パフォヌマンスが向䞊する堎合がありたすおそらく、䞻に9080が原因です。 enumerateずzipは同じ問題に悩たされおいたす。 おそらく、10507のように、 eachindexラッパヌずしおfastindexを実装する必芁がありたす。

ルヌルのむンデックス䜜成に興味がある堎合は、この問題を打ち負かすのではなく、最も興味深いフロンティアに焊点を圓おたしょう。 珟時点では、それは間違いなく10525です。 特にhttps://github.com/JuliaLang/julia/pull/10525#issuecomment-84597488には䜕らかの解決策が必芁です。

@timholy高速デカルトむンデックス䜜成のすべおの開発を実際に远跡したわけではなく、base /

いく぀かの点で、知るこずはあたりありたせん。内郚ではかなりの量が行われおいたすが、アむデアはそれを簡単に䜿甚できるようにするこずです。 ずおも文字通り

k = 0
for I in eachindex(A)
     B[k+=1] = A[I]   # B is being linearly-indexed, A is being cartesian-indexed
end

あなたが知る必芁があるのはそれだけかもしれたせん。 蚀い換えれば、 eachindexのヘルプが必芁なすべおのドキュメントである可胜性がありたす。ただし、この基本的なパラダむムのいく぀かの拡匵を䜿甚しお、非垞に倚くのアルゎリズムを蚘述できるこずがわかりたす。 それらの拡匵機胜が䜕であるか、そしおなぜそれらが匷力であるかは、実際、あたり明癜ではないかもしれたせん。

私はこれを今埌数ヶ月のうちに曞き留める予定ですが、人々が本圓に詳现を知りたいのであれば、おそらくJuliaConの話は合理的でしょう。 @Juthoたたは@mbaumanは、私ず同じようにその話をするこずができたす。

あいたいさに぀いおさらに远加したすが、最埌の議論のいく぀かは特定の重芁なポむントを芁玄したず思いたす。 おそらく私は、郚倖者ずしお、たたは恐れから、この皮の曖昧さに敏感であり、劇的に聞こえるリスクがありたす。 私の謙虚な意芋では、単玔でミッションクリティカルな思考挔習がいく぀あっおも、単玔な゚ラヌの費甚䟿益分析が䟡倀のない道にあなたを導く可胜性がありたす。

10507のように、各むンデックスのラッパヌずしおfastindexを実装する必芁がありたす。

@timholy eachindexが高速線圢配列のUnitRangeを返さない理由はありたすか それでもタむプは安定しおおり、呌び出し元がCartesianIndexを確実に取埗したい堎合は、手動でCartesianRangeを䜜成できたす CartesianRangeぱクスポヌトされないため、 eachindex(size(A))メ゜ッドを远加するこずもできたす。

それが最初にやったこずですが、 @ Juthoがそれを倉えたず思いたす。 それが圓おはたらない堎合は、おそらく気付かずに倉曎したした。倉曎は䞀貫性のために動機付けられたず思いたすしたがっお、 CartesianIndexを取埗するこずを期埅できたす。これにはある皋床の意味がありたす。 。 しかし、あなたが指摘するように、これを確実にするための代替手段がありたす。

@Jutho 、䜕か考えはありたすか

eachindex倉曎したこずを芚えおいたせんが、倉曎できた可胜性がありたす。 配列のタむプに関係なく䞀貫した結果が埗られるこずを陀いお、私は確かにそれの正圓な理由を芚えおいたせん。 しかし、効率的な線圢むンデックスを䜿甚する配列ず䜿甚しない配列の違いがドキュメントで明確に説明されおいる堎合、効率的な線圢むンデックスを䜿甚する配列の堎合、 eachindexが線圢範囲を返すこずができなかった理由はわかりたせん。

@timholy 、あなたの以前の投皿に応えお、私はJuliaConに参加できないので、 CartesianIndexこずに぀いお気軜に話しおくださいずにかく私はいく぀かの最埌の仕䞊げを提䟛しただけです。 すでにカンファレンスのレポヌトずビデオを楜しみにしおいたす。

気たぐれな考え任意の次元次元> 2を含むの配列Aの堎合、 A'がAむンデックスを呚期的に䞊べ替えるこずができたす。 したがっお、 A'[i, j, k] == A[j, k, i] 。 これは、MATLABのように解釈された堎合぀たり、それぞれ[n、1]および[1、n] 2d配列、2d配列の通垞の行列転眮、および行ず列の「ベクトル」の通垞の転眮になりたす。 したがっお、2D列の「ベクトル」を真のコベクトルにマップしたり、2D行の「ベクトル」を真のベクトルにマップしたりするこずはありたせん。 このプロパティは良いず思いたすが、他の人は同意しないかもしれたせん。配列オブゞェクトずしお解釈される行列ずベクトルのアむデンティティA'' == A'ずv'' == vを䞎えたす。 䞊で説明したようなタむプ階局真のベクトルず共ベクトルが抜象配列ず十分に区別されおいるを考えるず、 'は、線圢代数の抂念に察応する真のベクトルず共ベクトルに察しおたったく異なる方法を䞎えるこずができたす。 v'' == v満たす必芁はありたせんただし、それが人々が望むず刀断した堎合は可胜です。

明確にするために私は'が次元> 2の配列のためのメ゜ッドを持っおいる必芁があるず䞀瞬考えたせんが、私は䞊蚘のこの提案を芋おいたせんでしたそれが「むンデックスを逆にする」ずいう意味でない限り "そしお私はそれに぀いお蚀及したいず思いたした。 私がそれがしおいるのを芋る最も害䞀応のは抂念的です:(少し恣意的な組み合わせ挔算を線圢代数の領域ずしお通垞取られる挔算子ず混同したす。 これに察しお、線圢代数の抂念を玔粋にデヌタ䞭心の抂念に拡匵しようずするず、少なくずもある皋床のそのような混乱は避けられないず答えるこずができたすこの議論党䜓で蚌明されおいたす。 そのため、倚次元配列の巡回眮換の䟿利な省略圢を、倚次元配列の次元に察しお䞀般的に'が䜕をすべきかを決定する副産物ずしお、期埅されるケヌスに還元される限り、刈り取るこずができたす。 2次元。 A'(k)[I]がA[I]のむンデックスをk回呚期的に䞊べ替え、 A'(ndims(A))[I] == A[I]ずA'(-k)[I]がむンデックスを䞊べ替えるように、敎数匕数を取るメ゜ッドを远加するこずもできたす。反察方向に。

ちょっずした考え。

transposeが倚次元配列に察しお定矩されおいる堎合、それでもA''=A満たすこずをお勧めしたす。぀たり、それ自䜓が逆です。 これは、以前の提案ず盎接矛盟しおいたす。

それは公正です。 私が蚀ったように、私の提案は、転眮の線圢代数的重芁性ず、d> 2の堎合に課す配列䞭心の重芁性ずの間に亀裂を生じさせるこずに抵抗がない堎合にのみ朜圚的に魅力的です。 私の掚論は、その裂け目がすでに䞀皮の起こっおいる限り、そしおメ゜ッドが他の方法で完党に䜿甚されないのであれば、むンデックスを䞊べ替えるための省略圢を持っおいるのはいいかもしれたせん-それが䜕も必芁ずしない限りd = 2ケヌスを機胜させるための特別な凊理。 あなた@Juthoが述べたように、2次元の堎合の転眮次元が線圢代数的重芁性を持っおいるこずは䟿利な偶然の䞀臎ですそしお、共ベクトルを2次元配列ずしお識別した埌でのみ、 d> 2の堎合、 transposeの数孊的特性たずえば、 A'' == Aが必芁に぀いお慎重に考える必芁はありたせん。このルヌトを䜿甚したい堎合は、圹立぀可胜性のある方法がたくさんありたす。割り圓おられたす。䟋 A' 1回呚期的に䞊べ替え、 A'(k) k回呚期的に䞊べ替え、 A'(I)はI::Array{Int, 1} 、長さ<= ndims(A)呚期的に䞊べ替えたすIにリストされおいるむンデックスを䞊べ替え、 p::Permutationの長さ<= ndims(A) A'(p)は、 pに埓っおむンデックスを䞊べ替えたす。 しかし、おそらく最善の方法は、パッケヌゞを䜜成しお、それが十分に圹立぀かどうかを確認するこずだず思いたす。

たずえば、2014幎10月16日のStefanKarpinskiず2015幎3月22日のsimonbyrneによっお蚀及された2぀の倉曎/説明をサポヌトしたすが、1぀の芏定がありたす。

  1. transposeは、䞀般的なテン゜ルではなく、ベクトルず2次元行列にのみ䜿甚する必芁がありたす。
  2. 挔算子*およびtransposeは、蚈算の最埌に末尟のシングルトン次元を削陀する必芁がありたす。 そうしないず、末尟のシングルトン寞法が保持される堎合がありたす。

これらの2぀の倉曎は、倚くの䟿利さを提䟛し、埓来の線圢代数䜜業内の倚くのあいたいさを解決したす。 圌らは、個別に考えるこずができる䞀般的な配列の玢匕付けやテン゜ル代数に぀いお意図的に䜕も述べおいたせん。 特に、テン゜ル転眮は、行列/ベクトル転眮ずは完党に別個の操䜜であるず芋なす必芁がありたす。

この提案では、行列の乗算ず転眮を䜿甚する堎合、ベクトルず1列の行列の間に本質的に区別はなく、スカラヌ、長さ1のベクトル、および1行列の間に意味のある区別もありたせん。 -1行列。 ただし、 x'は、ベクトルではなく1行n列の行列になりたす。

䞀方、デヌタを保持する目的で、任意のサむズの配列を䜜成できたす。 乗算ず転眮の線圢代数の抂念が含たれないため、シングルトン次元は削陀されたせん。

以䞋は、提案された倉曎を䌎うJuliaセッションの架空のトランスクリプトです。

たず、スカラヌ、2぀のベクトル、および行列を定矩したす。

julia> alpha = 2.0
2.0

julia> x = [1.0; 2.0; 3.0]
3-element Array{Float64,1}:
 1.0
 2.0
 3.0

julia> y = [4.0; 5.0; 6.0]
3-element Array{Float64,1}:
 4.0
 5.0
 6.0

julia> A = [1.0 2.0 3.0; 4.0 5.0 6.0; 7.0 8.0 9.0]
3x3 Array{Float64,2}:
 1.0  2.0  3.0
 4.0  5.0  6.0
 7.0  8.0  9.0

スカラヌベクトルの乗算は、無関係な次元が存圚する堎合でも機胜し、結果は垞にベクトルになりたす。

julia> alpha*x
3-element Array{Float64,1}:
 2.0
 4.0
 6.0

julia> alpha*x[:,[1]]
3-element Array{Float64,1}:
 2.0
 4.0
 6.0

転眮は察合です。

julia> x'
1x3 Array{Float64,2}:
 1.0  2.0  3.0

julia> x''
3-element Array{Float64,1}:
 1.0
 2.0
 3.0

julia> x==x''
true

julia> x'''
1x3 Array{Float64,2}:
 1.0  2.0  3.0

行列に1列の行列を掛けるず、行列ずベクトルの積ず同じ結果が埗られたす。

julia> A*x
3-element Array{Float64,1}:
 14.0
 32.0
 50.0

julia> A*x[:,[1]]
3-element Array{Float64,1}:
 14.0
 32.0
 50.0

1行の行列に行列を掛けたものが1行の行列に等しくなりたす。

julia> x'*A
1x3 Array{Float64,2}:
 30.0  36.0  42.0

内積はスカラヌであり、行列-ベクトルおよび行列-行列積のより䞀般的な芏則によっお生成されたす。

julia> x'*y
32.0

julia> x'*y[:,[1]]
32.0

倖積は特別なものではありたせん。

julia> x*y'
3x3 Array{Float64,2}:
  4.0   5.0   6.0
  8.0  10.0  12.0
 12.0  15.0  18.0

julia> x[:,[1]]*y'
3x3 Array{Float64,2}:
  4.0   5.0   6.0
  8.0  10.0  12.0
 12.0  15.0  18.0

ベクトルずベクトルの積ぱラヌです。

julia> x*y
ERROR: `*` has no method matching *(::Array{Float64,1}, ::Array{Float64,1})

ベクトルず行列の積ぱラヌです。

julia> x*A
ERROR: DimensionMismatch("*")
 in gemm_wrapper! at linalg/matmul.jl:270
 in * at linalg/matmul.jl:74

行列の乗算は結合法則です。

julia> (x*x')*y
3-element Array{Float64,1}:
 32.0
 64.0
 96.0

julia> x'*y
32.0

julia> x*(x'*y)
3-element Array{Float64,1}:
 32.0
 64.0
 96.0

julia> norm((x*x')*y-x*(x'*y))
0.0

線集補品の内寞の降栌を含む2぀の䟋を削陀したした。 圌らは珟圚の議論ずはあたり関係がありたせんでした。

末尟のシングルトン次元を砎棄するこずは型安定操䜜ではないため、これにより、関連する操䜜の型安定性が倱われるのではないかず心配しおいたす。

私の芋方では、コベクタヌビゞネス党䜓は、削陀されるタむプに基づいお既知のシングルトン次元を持぀こずです。 たた、たたたた1぀の列しか持たないベクトルず行列の区別を維持するためにかなりの努力をx''おきたしたが、この提案により、

異端的な提案型パラメヌタヌから次元を削陀し、実行時にすべおの次元/サむズをチェックした堎合はどうなりたすか ずにかく、かなりの量を実行するこずになりたす。そしお、サむズを型パラメヌタヌずしお゚ンコヌドする型の次元パラメヌタヌはそのたたにしおおきたす。 アヒル、2週間隠れお、githubアカりントを@SomeoneWhoCertainlyIsntTimHolyUhUhNoWayに倉曎したす。

もちろん、10525だけで本圓に文句を蚀うでしょう。

FWIW、それはそれほどクレむゞヌなアむデアではないず思いたす。たずえば、トヌチの仕組みです。トヌチの開発者は、型システム内でのゞュリアの次元の゚ンコヌドに䞍満を衚明しおいたす。

@timholy質問これを䜿甚しお、線圢代数ずベクトルの転眮に関するセマンティクスを改善できたすか

それでもCoVector / DualVector / TransposeVector䜿甚に興味がある堎合は、新しいTimHolyArray{DataType}ラップする必芁があり、どちらかを理解する必芁がありたす。 2぀たたは1぀より倧きい次元の配列の転眮、たたはtharray次元が2぀たたは1぀より倧きい堎合の構築TransposeVector(tharray)犁止する...実際には、あらゆる皮類の実行時レベルで、珟圚コンパむル時゚ラヌである゚ラヌを発生させる必芁がありたす珟圚定矩されおいないため、型システムで犁止されおいる乗算など。

䞀方、この新しいクラス内に転眮フラグを実装するのは悪いかもしれたせん...それは効率的で軜量なコンテナであるべきものをより耇雑にしたす。 私はそのオプションを陀倖する傟向があり、コンパむラ/型システムにハヌドワヌクを任せたす。

私は必ずしもあなたの考えに反察しおいるわけではありたせんが、ベクトル転眮ず䞊行しお実行できる远加の問題のようです。

@timholy これが進むべき道かどうかは本圓に確信しおいたす。 ディメンションにディスパッチするこずが非垞に圹立぀堎合がありたす。

これをすべおのアレむに適甚するこずを提案したした。 しかし、私は今、私自身の提案に反察しおいたす。なぜなら、倚くの倚次元の堎合、 N次元配列に察しおNルヌプを生成する必芁があるからです。 Nが型パラメヌタヌでなければ、これ以䞊それを行うこずはできたせん。

はい、これはデカルトマクロたたは私がただ慣れおいない段階的な関数:-)の芁点ではありたせんか
テンプレヌトパラメヌタずしおディメンションを䜿甚するのが非垞に面倒なC ++でも同様のこずを行いたした。 しかし、さたざたな配列の次元を特殊化するために倧きなifステヌトメントが必芁だったため、動的バリアントが制限されおいる状況がありたした。

提案

  1. 珟圚の行列乗算動䜜の名前をtimesfastし、珟圚の転眮動䜜の名前をtransposefastたす。
  2. (*)ずtransposeを倉曎しお、前のコメントのように末尟のシングルトン次元を切り捚おたす。 たずえば、 u'*vはスカラヌになり、 v''はベクトルになり、 (v*v')/(v'*v)が定矩されたす。

既存の動䜜はタむプ安定です。 提案された動䜜は、倚くの線圢代数テキストの芏則に埓いたす。 それらは䞡方ずも䟡倀がありたす。 おそらくゞュリアは䞡方を持っおいる必芁がありたす。

教宀でJuliaを䜿甚したいので、効率よりも利䟿性を重芖するデフォルトの動䜜に投祚したす。

この非垞に長いスレッドに぀いお私を理解させおくれた䜕人かの貢献者に感謝したす

@briansutton あなたは本圓にあなたが求めおいるものを再考するべきだず思いたす。 掛け算の意味を再定矩するこずを提案する前に、ゞュリアがどのように機胜するかをより深く理解するたで埅぀こずをお勧めしたす。

この問題は、可胜な限り倚くの特殊なケヌスを回避する方法に関するものです。

シングルトン次元の混乱を蚱可するルヌルは、シングルトン次元の1぀が実際に気になる瞬間に厩壊したす。 「[すべおの]末尟のシングルトン次元を切り捚おる」ルヌルでは、 vが1芁玠のベクトルの堎合、 v'はスカラヌであるため、 v''もスカラヌ。 したがっお、この提案でも、 v == v''が垞に保持するずは限りたせん。

ルヌルを倉曎しお、「配列の次元が2の堎合、最埌の末尟のシングルトン次元のみを切り捚おる」こずができたす。 ただし、この倉曎されたルヌルを䜿甚しおも、倖積v * w'は行列乗算の定矩に自動的には埓わず、代わりにVector * Matrix独自の特殊な定矩である必芁があり、定矩は「圢状がNx1、Mでない限り、゚ラヌをスロヌしたす」。

@jiahao 

ベクトルず行列を䜿甚しお線圢代数を実行する堎合、スカラヌ、1芁玠ベクトル、および1行1列の行列を区別したくありたせん。 珟圚、さたざたな操䜜で3぀のオブゞェクトのいずれかが生成されたす。 私の提案は、行列の乗算ず転眮の操䜜に぀いお、3぀のうちの1぀を優先衚珟ずしお遞択するこずです。

最初の䟋 v==v'' に関しおは、そもそもv芁玠のベクトル

2番目の䟋に関しおは、はい、 v*w'はあなたが説明したずおりに凊理する必芁があるず思いたす。 行列の乗算ず転眮を䜿甚する堎合、ベクトルvずN行1列の行列v[:,[1]]は、内郚衚珟が異なっおいおも、同じ数孊的オブゞェクトを衚すようにしたす。 これには、Nベクトル×1行M列の行列を凊理するための特別なコヌドが必芁になりたす。

型の安定性が重芁であるずあなたはただ確信し

@briansutton 珟圚の型システムでJuliaコヌドを実行できるのず同じ速さで提案を実行するために必芁な機構を実装しおみるず、非垞に有益だず思いたす。 私は、予枬可胜なパフォヌマンスずCメモリレむアりトの互換性を提䟛するずいうゞュリアンの目暙を考えるず、あなたが述べた目暙は達成できないず信じおいたす。

議論が行き亀うこずを理解しおいるかどうかはわかりたせんが、1぀のこずが私の目に留たりたした。 垌望的芳枬かもしれたせんが、コンピュヌタヌが人間の脳ず同じくらい速く考えるこずができればいいのですが。 私が蚀いたいのは、ブラむアン・サットンが「奜たしい衚珟を遞ぶ」ずいうプログラムに぀いお話すずき、私たちが数孊をするずきず同じように考えるこずができるプログラムを想像するずいうこずです。 おそらく、それは今日の技術では実珟䞍可胜であり、物事を遅くしすぎるでしょう。 しかし、それはいいこずではないでしょうか...

私は物理孊者であり、ゞュリアのアクティブナヌザヌです。

私はもはや、倩候を維持したり、埌続のシングルトンの次元をすべお削陀したりするこずを匷く奜みたせん。

しかし、ここで私は密接に関連した問題を提起したいず思いたす。

珟圚のJuliaの実装

Vを3次元ランク1テン゜ルベクトルずしたす。
V [1]は、1次元のランク1テン゜ルではなくスケヌラヌを提䟛したす

Aを3x4x5ランク3テン゜ルずしたす
B = A [1、、]は、1x4x5ランク3のテン゜ルを䞎えたす。

䞊蚘の2぀の動䜜は完党に䞀貫しおいたせん。

私は次のむンデックス䜜成/スラむド機胜を匷く奜みたす。

Aを3x4x5ランク3テン゜ルずしたす
B = A [1、、]は、4x5のランク2テン゜ルを䞎えたす。
C = A [11、、]は、1x4x5のランク2テン゜ルを䞎えたす。
珟圚、䞊蚘の2぀は同じ結果をもたらしたす

Vをランク1テン゜ルずしたす
B = V [1]は私たちにスケヌラヌを䞎えたす
C = V [11]は、1次元のランク1テン゜ルを䞎えたす。

この機胜は、テン゜ルの圢状をより簡単に倉曎するのに圹立ち、埌続のシングルトンむンデックスを蚱可するずきに圹立ちたす。

ベスト

Xiao-Gang


差出人esd100 [[email protected]]
送信2015幎6月9日火曜日21:46
宛先JuliaLang / julia
Ccシャオガンりェン
件名Re[julia]ベクトル転眮を真剣に受け止める4774

議論が行き亀うこずを理解しおいるかどうかはわかりたせんが、1぀のこずが私の目に留たりたした。 垌望的芳枬かもしれたせんが、コンピュヌタヌが人間の脳ず同じくらい速く考えるこずができればいいのですが。 私が蚀いたいのは、ブラむアン・サットンが「奜たしい衚珟を遞ぶ」ずいうプログラムに぀いお話すずき、私たちが数孊をするずきず同じように考えるこずができるプログラムを想像するずいうこずです。 おそらく、それは今日の技術では実珟䞍可胜であり、物事を遅くしすぎるでしょう。 しかし、それはいいこずではないでしょうか...

—
このメヌルに盎接返信するか、Gi tHubhttps//github.com/JuliaLang/julia/issues/4774#issuecomment-110554622で衚瀺しおください。

぀たり、C = A [11、、]は1x4x5のランク3テン゜ルを䞎えたす。

Xiao-Gang


差出人Xiao-Gang Wen [[email protected]]
送信日2015幎6月22日月曜日12:01 PM
宛先JuliaLang / julia; JuliaLang / julia
Ccシャオガンりェン
件名RE[ゞュリア]ベクトル転眮を真剣に受け止める4774

私は物理孊者であり、ゞュリアのアクティブナヌザヌです。

私はもはや、倩候を維持したり、埌続のシングルトンの次元をすべお削陀したりするこずを匷く奜みたせん。

しかし、ここで私は密接に関連した問題を提起したいず思いたす。

珟圚のJuliaの実装

Vを3次元ランク1テン゜ルベクトルずしたす。
V [1]は、1次元のランク1テン゜ルではなくスケヌラヌを提䟛したす

Aを3x4x5ランク3テン゜ルずしたす
B = A [1、、]は、1x4x5ランク3のテン゜ルを䞎えたす。

䞊蚘の2぀の動䜜は完党に䞀貫しおいたせん。

私は次のむンデックス䜜成/スラむド機胜を匷く奜みたす。

Aを3x4x5ランク3テン゜ルずしたす
B = A [1、、]は、4x5のランク2テン゜ルを䞎えたす。
C = A [11、、]は、1x4x5のランク2テン゜ルを䞎えたす。
珟圚、䞊蚘の2぀は同じ結果をもたらしたす

Vをランク1テン゜ルずしたす
B = V [1]は私たちにスケヌラヌを䞎えたす
C = V [11]は、1次元のランク1テン゜ルを䞎えたす。

この機胜は、テン゜ルの圢状をより簡単に倉曎するのに圹立ち、埌続のシングルトンむンデックスを蚱可するずきに圹立ちたす。

ベスト

Xiao-Gang


差出人esd100 [[email protected]]
送信2015幎6月9日火曜日21:46
宛先JuliaLang / julia
Ccシャオガンりェン
件名Re[julia]ベクトル転眮を真剣に受け止める4774

議論が行き亀うこずを理解しおいるかどうかはわかりたせんが、1぀のこずが私の目に留たりたした。 垌望的芳枬かもしれたせんが、コンピュヌタヌが人間の脳ず同じくらい速く考えるこずができればいいのですが。 私が蚀いたいのは、ブラむアン・サットンが「奜たしい衚珟を遞ぶ」ずいうプログラムに぀いお話すずき、私たちが数孊をするずきず同じように考えるこずができるプログラムを想像するずいうこずです。 おそらく、それは今日の技術では実珟䞍可胜であり、物事を遅くしすぎるでしょう。 しかし、それはいいこずではないでしょうか...

—
このメヌルに盎接返信するか、Gi tHubhttps//github.com/JuliaLang/julia/issues/4774#issuecomment-110554622で衚瀺しおください。

あなたが求めおいるのは、 slice珟圚どのように機胜しおいるかです。 私の感芚では、 A[stuff]はslice(A, stuff)同矩語になるので、おそらくあなたはあなたの望みを埗るでしょう。

芪愛なるティム

ヒントありがずうございたす。 スラむスしおみたした。 それは私のニヌズに合いたせん。 スラむスは、:: Arrayデヌタ型を䜿甚する他のコヌドでは䜿甚できない新しいデヌタ型「subarray」を生成したす。

「サブアレむ」デヌタ型を蚱可するように、他のコヌドを倉曎できるかもしれたせん。

Xiao-Gang


差出人Tim Holy [[email protected]]
送信日2015幎6月22日月曜日17:32
宛先JuliaLang / julia
Ccシャオガンりェン
件名Re[julia]ベクトル転眮を真剣に受け止める4774

あなたが求めおいるのは、スラむスが珟圚どのように機胜するかです。 私の感芚では、A [stuff]はsliceA、stuffの同矩語になるので、おそらくあなたはあなたの望みを埗るでしょう。

—
このメヌルに盎接返信するか、Gi tHubhttps//github.com/JuliaLang/julia/issues/4774#issuecomment-114268796で衚瀺しおください。

コヌドでAbstractArray代わりに具䜓的なArrayタむプを䜿甚するこずに本圓に䟝存しおいるものはありたすか 物事を機胜させるには、 ArrayをAbstractArrayに怜玢/眮換するだけで枈みたす。

芪愛なるスコット

ヒントありがずうございたす。

Xiao-Gang


差出人スコットP.ゞョヌンズ[[email protected]]
送信日2015幎6月25日朚曜日9:55 AM
宛先JuliaLang / julia
Ccシャオガンりェン
件名Re[julia]ベクトル転眮を真剣に受け止める4774

コヌドでAbstractArrayの代わりに具象配列型を䜿甚するこずに本圓に䟝存しおいるものはありたすか 物事を機胜させるには、配列をAbstractArrayで怜玢/眮換するだけで枈みたす。

—
このメヌルに盎接返信するか、Gi tHubhttps//github.com/JuliaLang/julia/issues/4774#issuecomment-115265047で衚瀺しおください。

それはあなたのためにトリックをしたしたか 喜んでお手䌝いさせおいただきたす

@wenxgwen 、たたは、 copy(slice(A,...))を呌び出しお、既存の関数でネむティブに機胜する新しいArrayのスラむスのコピヌを取埗するこずもできたす。

この問題を修正するこずは、今や儲かる努力になっおいたす

この問題を修正するこずは、3぀のコンマぞのパスで重芁になりたした...
image

しかし、すべおの深刻さで。 私は議論を完党に読み通そうずしたしたが、これが以前に提案されおいないこずを保蚌するこずはできたせん

AbstractArray定矩を拡匵しお、基になるデヌタが行ベヌスたたは列ベヌスのストレヌゞであるかどうかを定矩する远加の特性LinearIndexingず同様を持たせるこずはできたすか この远加により、次のプロパティが開きたす名前に焊点を圓おないでください...抂念のみ。

v --> length-2 Vector{Col}
  [ 1
    2 ]

v'  --> length-2 Vector{Row}
  [ 1 2 ]

m --> 2x2 Matrix{Col}
  [ 1 3 
    2 4 ]

m' --> 2x2 Matrix{Row}
  [ 1 2 
    3 4 ]

Some operations:
v'  --> length-2 Vector{Col}
v'' == v
v*v or v'*v'  --> either error, or do element-wise multiplication
v' * v --> scalar
v * v' --> 2x2 Matrix  (could be Row or Col??)
v' * m --> 2-length Vector{Row}
v * m --> either error or broadcasting operation
m * v --> either error or broadcasting operation
m * v' --> 2-length Vector{Col}

Indexing:
v[2] --> 2
v[1,2] --> error
v'[1,2] --> 2
m[1,2]  --> 3
m'[1,2]  --> 2

Size:
length(v)  --> 2
length(v')  --> 2
size(v)  --> (2,)
size(v')  --> (2,)
length(m)  --> 4
size(m)  --> (2,2)

明らかに、この提案には倚くの定矩が欠けおいたすが、おそらくそれは議論を始めるこずができたす。 列むンデックスず行むンデックスの䞡方のストレヌゞを同時にサポヌトし、途䞭でいく぀かの問題を「修正」するこずはできたすか

ルヌプや他の倚くの操䜜に぀いお私が考えるのは圓然のこずなので、Juliaが行ベヌスのストレヌゞであるこずを匷く望んでいたす。 そしお私だけがこのように考えおいるずは思いたせんコメントをお願いしたす

コンストラクタヌにも行たたは列を取り蟌むこずは興味深い考えです。 これは、GitHubの発行システムのどこかで以前に議論されたず思いたす。 私は間違っおいる可胜性がありたす

私の教科曞のほずんどは数孊に列を䜿甚しおいるため、個人的には列ベヌスのストレヌゞを奜みたす。ゞュリアでは、代わりに行を䜿甚するようにすべおを倉曎する必芁はありたせん。 私も最初は奇劙だず思いたしたが、すぐに私の仕事では問題になりたせんでした。 行で簡単に衚珟できるアルゎリズムがありたすが、これが必芁なずきに非暙準のストレヌゞを䜿甚できるようにする必芁があるのはこのためです。 関数を呌び出すずきにどのタむプを䜿甚するかに぀いお疑問が生じないように、゚クスポヌトされる関数がある堎合は、垞に列の䞻行列たたは列ベクトルを返すずいう芏則があるこずを願っおいたす。 そうしないず、非垞に面倒になり、返されるタむプを垞に調べなければならないずきに䜿甚するのが䞍快になる可胜性がありたす。

列ベヌスず行ベヌスは、この問題の範囲内ではありたせん。

@tbreloff私はそのアむデアがずおも奜きです。 行が䞻芁な蚀語/ラむブラリずより簡単にむンタヌフェむスできるず䟿利です。

Jiahaoは、行メゞャヌず列メゞャヌのどちらを優先するかはトピックから倖れおいるずいうのは正しいこずです。 その
「ゞュリアン」の方法で転眮問題を解決するずいう玠晎らしい副䜜甚
パラメトリックタむプず段階的関数は、人々により倚くの柔軟性を䞎えたす
ストレヌゞ圢匏。

行/列の特性を配列に远加するずいうアむデアが気に入らない堎合は、
TransposeView {T、N}でもたったく同じこずができたすが、私は
うたく実装するのはもっず耇雑になるのではないかず思いたす。

远加の特性の最倧の欠点は、新しいナヌザヌの混乱です。
それは私が和解するのに苊劎しおいるこずです。

2015幎9月26日土曜日、スコットP.ゞョヌンズ[email protected]
曞きたした

@tbreloffhttps //github.com/tbreloff私はこのアむデアがずおも奜きです。 それ
蚀語/ラむブラリずより簡単にむンタヌフェヌスできるようになるず玠晎らしいでしょう
それは行メゞャヌです。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/JuliaLang/julia/issues/4774#issuecomment-143436947 。

コヌルオヌバヌロヌドはデザむンスペヌスをたったく倉曎したすか 䞊蚘の堎合、 *意味にある皮のあいたいさが存圚するように思われるこずがありたした。 特に、 v::Covector * w::Vectorにスカラヌを返したい堎合、 *実際には行列の乗算ではなく、「 v䞋にwマップ」するのでしょうか。 もしそうなら、ベクトル自䜓が共ベクトル䞊の線圢写像であるため、 w::Vector * v::Covectorがスカラヌを返すこずを同様に芁求するこずはできたせんか

おそらくそれは、代わりに過負荷に圹立぀だろうcallず曞くv(w) "䞋のマップを瀺すためにv䞊の操䜜" w 、および同様のためのw(v) -どちらもスカラヌを返したす。 これにより、2次元配列の堎合に、配列挔算ず線圢代数挔算が共有するセマンティクスに察応するための䜙裕ができたすか

もしそうなら、ベクトル自䜓がコベクトル䞊の線圢マップであるため、w :: Vector * v :: Covectorがスカラヌを返すこずを同様に芁求するこずはできたせんか

私たちは、倚くの人が1幎生の倧孊で芋おいる行列ずベクトルの芏則に埓おうずしおいるず思いたす。これは、非可換で、ベクトル*転眮ベクトル->行列ランク1、぀たり1぀非れロの特異倀のみを持ちたす。倀。 あなたが曞いたものは、抜象的な線圢代数の抂念のように聞こえたす。ベクトルずco / dual-vectorは、互いにマップされおスカラヌになりたす。これは問題ありたせんが、JuliaずMATLABで詊行されるものIMHOずは少し異なりたす。 あなたが曞いたものを内積ずしお解釈できるず思いたす。 dot()たたは⋅ 、2぀の共ベクトルおそらく共ベクトルに察しお定矩する必芁がありたすに䜜甚したすが、倖偎も必芁な堎合がありたす。 -積であり、珟圚、非环積*䜿甚するず、䞡方の動䜜を蚘述しお衚珟できたす。

呌び出し芏玄v(w)に぀いおは、ドット積に぀いおも同様に、 wの方向にvの量が必芁であるず蚀えたす。これは、むンデックス挔算子v[w]を䜿甚するこずを瀺唆しおいたす。

同様に、ドット積に぀いおは、 vの方向にw vの量が必芁であるず蚀うこずができたす。これは、むンデックス挔算子v[w]を䜿甚するこずを瀺唆しおいたす。

この提案は、むンデックス䜜成のセマンティクスにほが準拠しおいたすが、準拠しおいたせん。 たた、 vがVector{<:Integer}堎合、ベクトルむンデックスの珟圚のサポヌトずも衝突したす。

v :: Vector{T<:Real}堎合、 v[1]は内積v⋅e₁ず同等であり、 e₁は最初の軞に沿った暙準基底ベクトルであるず考えおください。 したがっお、単玔なむンデックス䜜成は実際には機胜です

   v[n] : n :: Integer --> y = (v ⋅ eₙ) :: T

ベクトルむンデックスの堎合、 v[[1, 2]]は[v⋅e₁, v⋅e₂]を生成したす。これは、 {e₁, e₂}たたがる郚分空間にvを射圱した結果であり、同等にv' * [e₁ e₂]結果です。

したがっお、ベクトルむンデックスは関数です

   v[I] : I :: Vector{<:Integer} --> y = v' * [eₙ for n in I] :: Vector{T}

v[w] = (w ⋅ v) vを䜜成する提案は、むンデックスのコレクションn  w から正芏基底ベクトルのコレクションぞの暗黙のマッピングを排陀するため、この定矩ず矛盟したす。 eₙ 。これは、珟圚のむンデックス䜜成ルヌルが機胜するために必芁です。

今のずころ、スコヌプをベクトル転眮だけに制限するず、2぀のオプションがあるず思いたす。 ゚ラヌにするか、特別なコベクトル型を導入するこずができたす。 ゞュリアのベクトルのファヌストクラスの性質を考えるず、前者は非垞に難しい販売になるず思いたす そしおそれを䞀貫しお行うには、ベクトルが行列の代数に完党に参加するこずを完党に犁止する必芁がありたす。

それで、私はコベクタヌを撃ちたした。 倧倉な䜜業ですが、残念ながらこれ以䞊時間をかけるこずはできたせん。 誰かがそれで走るか、私たちが困難から孊び、逃げるこずを決心するこずを期埅しお、私はここにそれを投皿したす。 しかし、ビュヌずしお転眮を䜿甚するブランチビルディングがあり、行列の乗算はコベクトルで実装されおいたす。 䞀郚の遞択されたテストは合栌したすが、 depwarn=errorがない堎合のみです䟋 ./julia -e 'using Base.Test; include("test/matmul.jl")' 。 https://github.com/JuliaLang/julia/compare/mb/transpose

行列ずベクトルのtransposeずctransposeに䜿甚する2぀の新しいビュヌタむプを定矩したした。

immutable MatrixTranspose{C,T,A} <: AbstractArray{T,2}
    data::A # A <: AbstractMatrix{T}
end
immutable Covector{C,T,V} 
    data::V # V <: AbstractVector{T}
end

Cパラメヌタヌは、転眮が転眮であるかどうかを衚す単玔なブヌル倀です。 CovectorはAbstractArrayサブタむプではないこずに泚意しおください。 これは、ディスパッチを合理的に機胜させるための非垞に匷力な芁件です。

いく぀かの欠点

  • コベクタヌは明らかに耇雑であり、アクセス可胜で厳密な方法で文曞化するこずは困難です。 ここでは蚀語が圹立぀かもしれたせん—単にそれらをRowVectorず呌ぶこずができたす。 ずにかく、この振る舞いを説明しようずするずきに最初に盎面する問題は、コベクトルの圢状に぀いお話す方法です sizeは未定矩です。 (m,n)が行列の圢状である堎合、 (m,)はベクトルの圢状を衚すこずができたす そしお、タプル衚蚘を乱甚する堎合、圢状が(,n)ようにコベクトルを乱暎に蚘述するこずができたす

    • 行列*ベクトルは(m,n) × (n,) → (m,)

    • コベクトル*行列は(,m) × (m,n) → (,n)

    • ベクトル*コベクトルは(n,) × (,n) → (n,n)

    • コベクトル*ベクトルは(,n) × (n,) → α スカラヌ

  • ここでの二項挔算ず型の数は、定矩する必芁のあるメ゜ッドの数の倧幅な組み合わせ爆発に぀ながりたす 乗算のためだけに

    • 突然倉異:(突然倉異、非突然倉異
    • 転眮A、Aᵀ、Aᎎ×B、Bᵀ、Bᎎ。
    • 圢状:(マット×マット; Vec×マット;マット×Vec、Vec×Vec。 これらのすべおが転眮のすべおの組み合わせでサポヌトされおいるわけではありたせんが、ほずんどがサポヌトされおいるこずに泚意しおください。
    • 実装BLAS、Strided、generic、および構造行列の特殊化

    これらの操䜜のいく぀かは、耇数のディスパッチおよびフォヌルバック動䜜ずうたく連携したすが、それでも各オペレヌタヌのメ゜ッドの数は_膚倧です_。 ここで混合行列/ベクトルのサポヌトを完党に削陀するず、間違いなく物事を単玔化するのに圹立ちたす。


  • すべおのスカラヌ次元を削陀する際の問題をすぐに解決するわけではありたせん。 スカラヌ次元を削陀するずきにあらゆる皮類のベクトル転眮をサポヌトするず、耇玠共圹に関しおあいたいな領域になりたすhttps://github.com/JuliaLang/julia/pull/13612を参照。 A[1,:]でコベクトルを返すこずもできたすが、䞀般化がうたくいかず、スラむスから非AbstractArrayを返すのはかなり奇劙です。 人々が13612を詊しお、ベクトルの共圹転眮が問題を匕き起こすケヌスを具䜓的に探すこずができれば玠晎らしいでしょう。珟圚のベクトル転眮セマンティクスでも同様に悪く、Covectorを公開する必芁はありたせん。

いく぀かの利点

  • Ax_mul_Bxぞの特別な解析の代わりに盎接ディスパッチを䜿甚するこずは倧きな勝利です。 それはBLASのAPIで非垞にうたく構成されおいたす。 䞀般に、アルゎリズムの最も内偎のレベルで掻甚したいので、この情報を匕数ずずもに保持する方がはるかに理にかなっおいたす。 BLAS呌び出しの堎合、単玔な関数を䜿甚しお転眮文字 ntc を怜玢できたす。
  • v'vはスカラヌを返すため、ベクトルず共ベクトル間の乗算は結合法則になりたした。 v'v*vを巊から右に評䟡し、マトリックスの圢成を回避できるようになりたした。
  • これにより、Vector * Matrixを削陀できたす。これは、すべおのベクトルを埌続のシングルトン次元があるかのように扱う堎合にのみ機胜したす。これは、䞀般に埌続のシングルトン次元のサポヌトを完党に削陀するための倧きなステップです。

その他の泚意事項

  • ブヌル型パラメヌタヌで衚される転眮の耇雑さは問題なく機胜したすが、パラメヌタヌを間違った順序で定矩したように感じるこずがよくありたした。 TずC䞡方を実際に制限たたはキャプチャしたいず思うこずはめったにありたせんAbstractArray{T}ず䞀臎したす。
  • これは、StridedArrayの問題を実際に悪化させたす。 *のメ゜ッドテヌブルを読み取るこずは、 ::Union{DenseArray{T<:Union{Complex{Float32},Complex{Float64},Float32,Float64},2},MatrixTranspose{C,T<:Union{Complex{Float32},Complex{Float64},Float32,Float64},A<:Union{DenseArray{T,1},DenseArray{T,2},SubArray{T,1,A<:DenseArray{T,N},I<:Tuple{Vararg{Union{Colon,Int64,Range{Int64}}}},LD},SubArray{T,2,A<:DenseArray{T,N},I<:Tuple{Vararg{Union{Colon,Int64,Range{Int64}}}},LD}}},SubArray{T<:Union{Complex{Float32},Complex{Float64},Float32,Float64},2,A<:DenseArray{T,N},I<:Tuple{Vararg{Union{Colon,Int64,Range{Int64}}}},LD}}ようなタむプでは非垞に困難です。 確かに、私はそれをタむプ゚むリアスずしお䜜成したしたが、これらの異なるタむプ゚むリアス名をすべお管理するだけでも面倒です StridedMatOrTrans 、 QRCompactWYQorTransposeなど。
  • これをSparseVectorず統合する機䌚はありたせんでしたが、CSRを必芁ずせずに転眮を効率的に衚すため、これは倧きな勝利になりたす。
  • コベクトルにスカラヌおよび/たたは非スカラヌむンデックスを定矩する必芁がありたすか もしそうなら、 r[:]たたはr[1:end]の結果は䜕ですか それはベクトルですか、それずも共ベクトルですか できれば、これを定矩せずに逃げようず思いたす。 興味深いこずに、Matlabには、行ベクトルを他のベクトルでむンデックス付けするための非垞に特別なルヌルがありたす。奇劙なコヌナヌケヌスを犠牲にしお、行性を維持しようず非垞に努力しおいたす r((1:end)')はr(1:end)はr(:)' 。 今のずころ、ブランチでスカラヌむンデックスを定矩しおいたすが、おそらくそれも削陀する必芁がありたす。 これにより、Covectorは、それを認識しおいる線圢代数挔算でのみ䜿甚されるこずが明確になりたす。

最埌に、ここで芋た利点のほずんどは、 MatrixTransposeタむプ自䜓にも同じように適甚できるこずを指摘したいず思いたす。 これは、Covectorが抜象代数を深く掘り䞋げお、ベクトル/行列の混合挔算を有効にするこずなく、非垞にうたく機胜するこずを瀺しおいるず思いたす。 それは確かに玠晎らしい機胜線圢代数ず䞀貫しおベクトルを䜿甚する機胜を远加したすが、それが远加の耇雑さの䟡倀があるかどうかはわかりたせん。

奜奇心から、 @ mbaumanをただ芚えおいる堎合、ブヌルパラメヌタCを導入する動機は䜕ですか あなたは疑䌌特性でただ持぀こずはできたせん

transpose(::Matrix) -> MatrixTranspose
transpose(::MatrixTranspose) -> Matrix

 私はここであなたの䟋倖的な刀断を疑うこずはありたせん。ただ、どのような認識があなたにこれを匷制したのかを理解したいだけです。

おそらく、これをPermutedDimensionArrayタむプに䞀般化しお、順列を゚ンコヌドするタプルパラメヌタヌを䜿甚するこずができたす。 Covectorタむプは明らかに異なる目的を持っおおり、別のものである必芁がありたす。

共圹転眮および(A').'非転眮共圹配列を凊理する方法が必芁です。 これを行うための3぀の明癜な方法がありたす。

  • 1぀のMatrixTranspose型内にブヌルフィヌルドずしお共圹を栌玍したす。 振り返っおみるず、これは間違いなく倖郚BLASずのむンタヌフェヌスに最適なオプションだず思いたす。 ただし、ネむティブのJuliaBLASに関しおは、Julia / LLVMがT.isconjugate ? conj(T[i,j]) : T[i,j]をルヌプから匕き䞊げるこずができるこずを確認したいず思いたす。
  • 掻甚パラメヌタを持぀1぀のタむプ。 これが私が遞んだものであり、珟圚、 Ac_mul_Btや友人を介しお共圹性の疑䌌ディスパッチを行っおいるずいう事実に圱響を受けたず思いたす。 たた、Juliaが実行できるブランチ削陀の最適化に぀いおより匷力な保蚌がありたす。 しかし、私はそれに぀いお䞀生懞呜考えおいたせんでした スケッチの実装を始めたかっただけで、Covectorに぀いおもっず心配しおいたした。
  • MatrixTransposeずMatrixCTranspose 2぀の異なるタむプ。 型パラメヌタヌず同型ですが、2぀の別々のラッパヌ型が煩わしいず思いたす。 抜象スヌパヌタむプずナニオン゚むリアスが圹立ちたすが、それでもこのオプションではなくパラメヌタヌを遞択したす。

転眮型内に倉換関数を栌玍する型付き関数の4番目のオプションがあるず思いたすが、関数を高速化するには型パラメヌタヌも必芁であり、それも簡単にディスパッチされない型パラメヌタヌです。

ConjugateViewラッパヌを䜿甚できるかどうか疑問に思いたす。ルヌルconjずtranspose䜿甚するず、 ConjugateViewがMatrixTransposeラッパヌ内に配眮されたす。 。 ぀たり、 A a Matrix堎合、
A' = conj(transpose(A)) = transpose(conj(A))すべおMatrixTranspose{ConjugateView{Matrix}}生成したす情報のないタむプのパラメヌタヌを削陀したす。

ああ、そうです、それも賢明です。 私は共圹転眮を1぀の原子の「もの」ず考える傟向があるので、そのオプションを逃したした。 非共圹転眮を、圢状倉曎のように、特別なサブ配列むンデックスタむプでどのように衚すこずができるかを考えおいたした。

皆さんがただこれに取り組んでくれおうれしいです これは壮倧なスレッドです 3぀の歓声!!!

これは1.0で蚈画されおいたすか

2぀の問題18056、18136で、私はこの巚倧なスレッドを指摘されたした。
だから私はそれを詊しおみたす。

これで、ゞュリアは真の1次元ベクトルを持ち、_e.g._ mx[row,:]はもう1xn行列ではありたせん。
これは歓迎すべき倉曎です

しかし、副䜜甚ずしお、いく぀かの既存の問題がより明癜になりたした。
v*mxが1次元ベクトルでは機胜しないずいう事実に噛たれたした。
数孊的には、自然に機胜し、1次元ベクトルを返すはずです。
䞀般的なa*b補品が契玄によっお定矩されおいる堎合
第1項の最埌のむンデックスず第2項の最初のむンデックス。

珟圚、Vector-Matrix補品のメ゜ッドシグネチャは次のずおりです。
(*)(A::AbstractVector, B::AbstractMatrix) = reshape(A,length(A),1)*B
そしお、この方法を甚に䜿甚されおいるv*v'堎合ずないためにv*mx 。
これを指摘しおくれた@andreasnoackに感謝したす。
明らかに、単䞀の方法を䞡方に䜿甚するこずはできたせん。

JuliaはMatlabのようないく぀かの慣習に苊しんでいるようです。
しかし、Matlabには、1-dベクトルはなく、1xnおよびnx1行列のみがありたす。
自然なこずがたくさんあるので、ここで問題が発生する可胜性がありたす。
ゞュリアには真の1-dベクトルがあり、これは倧きな利点になるはずです。
それ自䜓の本圓に䞀貫した状態に到達するのは玠晎らしいこずです。

この堎合、Fortranは、埓うべきはるかに優れた、より䞀貫性のある䟋です。
transpose挔算は、Fortranの行列に察しおのみ定矩されおいたす。
真の1-dベクトルから1xn行列を䜜成するこずは、単に転眮ではありたせん。
matmulに぀いおは、18056で匕甚されおいるメットカルフの本の抜粋を参照しおください。

@alanedelmanの元々のポむントのほずんどは

だからここにいく぀かの既存の問題を単に治すであろう提案がありたす、
珟圚の状態を可胜な限り尊重しながら

  • 真の1次元ベクトルから1xn行列を䜜成するためにv'をそのたた保持したすv
  • rowmxおよびcolmx関数の方が優れおいたすが、 v'は広すぎお倉曎できたせん
  • 真の1次元ベクトルを䜜成するためのvec関数がすでにありたす
  • v'の逆数はv''なくvec(v') 、私たちはそれず䞀緒に暮らすこずができたす
  • a*bの補品は、垞に最埌のむンデックス契玄する必芁がありaずの最初のむンデックスb
  • *挔算子は、内積にも倖積にも䜿甚しないでください
  • 内積に぀いおは、すでにdot関数がありたす
  • 倖積の堎合、 *の䜿甚を排陀する必芁がありたす぀たり、 v*v'構文
  • 倖積の堎合は、新しい機胜を䜿甚する必芁がありたす
  • 察応する䞭眮挔算子は構文を軜く保぀こずができたす

[の簡朔な数孊的構文]の倖積を倱うこずは残念なこずです。 個人的にvec * matをあきらめたいです。

既存のPernutedDimsArrayは、芪ずビュヌの次元数が異なる堎合をすでに凊理できたすか もしそうなら、倚分それはベクトルの芪のためにさえ非共圹転眮ラッパヌタむプずしおすでに䜿甚可胜です。

ドキュメントにPermutedDimsArrayが芋぀かりたせんでした。

しかし、私は、さらに倚くのデヌタ型を発明する代わりに、
3皮類のアレむ補品のみを明確に分離する必芁がありたす。
内積はすでに分離されおいたす。
通垞の補品ず倖積を分離するだけで枈みたす。
倖積は倱われず、構文のみが倉曎されたす。
v*mx堎合は、より深刻な問題の兆候ずしおのみ考慮しおください。

「メ゜ッドの欠萜の問題」を陀けば、心配する必芁のあるタむプではなく、 .'が遅延ラッパヌタむプおよび'返す実装の詳现になりたす。その共圹バヌゞョン。 そうでなければ、 vec*matずvec*vec'䞡方が同じ*挔算子を䜿甚するこずはできないず思いたす。 論文でvec*matを芋た堎合、それは私には間違っおいるように芋えたすが、 vec*vec'かなり頻繁に芋られたす。

しかし、もっず考えおみるず、PermutedDimsArrayはその芁玠を配列の配列に再垰的に転眮しないので、ここで䜿甚するラッパヌ型ずしおはあたり適しおいたせん。

もう1぀の方法は、ベクトル転眮を完党に犁止するこずです。 ここでの議論はすでに培底しすぎおいるず思いたす。圱響がどのようになるかを評䟡するために、䞀方たたは䞡方のオプションの包括的な実装を埅っおいたす。

このスレッドが終わりに近づいおいる間、あなたが議論の準備ができおいたこずに感謝したす。

v*mxは奇劙に芋えるかもしれたせんが、結晶孊的コヌドで頻繁に䜿甚されたす。
たた、Fortranのmatmulによっお適切に凊理されたす。 18056を参照

u*v'補品に戻りたす。
uずvが䞡方ずもnx1行列の堎合、これは正芏行列の積です。
これは、倖積ず同じ結果を提䟛するこずがわかりたす。
しかし、これは倖積を゚ミュレヌトするために行列積を䜿甚しおいるだけです。
これは、すべおがマトリックスであるMatlabの䞖界ではシヌムレスです。

Juliaには、Fortranの䞖界に近い真の1次元ベクトルがありたす。
ゞュリアでは、転眮ベクトルv'はすでに問題になっおいたす。
他の人がゞュリアにすでに提案したように、Fortranの遞択はそれを犁止するこずです。

Fortranには、倖積の組み蟌み関数はありたせん。
ゞュリアはv'を1xn行列に簡単に倉換したす。
そしお、1-dベクトルず1xn行列に察しお*挔算を実行したす。
耇数のディスパッチがあるため、これを行うこずができたす。
しかし、ここでは*は確かにもはや行列積ではありたせん。

FortranずJuliaが同じように動䜜するポむント
どちらも内積に察しお個別のdot関数を䜿甚するずいうこずです。
dotも*挔算子にバンドルするずいう議論がありたした。
しかし幞いなこずにそれは起こりたせんでした。

したがっお、線圢代数の3぀の積を凊理する必芁がありたす。
通垞の行列積、内積、および倖積。
珟圚、 *挔算子は、通垞の補品ず倖積を組み合わせた構文です。
私が提案したのは、これらを分離しお、より䞀貫した状態に到達するこずだけです。

ああ、倖積を省略したしたが、すでに十分に分離されおいたす

内積、倖積、および行列乗算は、積を分割/分類する数孊的に適切な方法ではないず思いたす。 以䞋は確かに様々な人が䞊で述べたこずの繰り返しですが、このトピックの長さを考えるず、時々芁玄を含めおも倧䞈倫だず思いたす。 これは私の個人的な芁玄であり、私は確かに専門家ではないので、間違っおいる堎合は蚂正しおください。

抜象線圢代数蚭定では、䞻なプレヌダヌはベクトルv ベクトル空間V䜏んでいる、線圢マップ1぀のベクトル空間V䜜甚し、おそらく異なる空間W ずこれらのマップの構成、線圢圢匏たたは共ベクトルデュアル空間V*䜏み、 Vからスカラヌぞのマッピング、内郚積 V × Vからkron 。 倖積私はベクトルず共ベクトルの間のテン゜ル積ずしお考えるこずを奜みたす。

この問題で特に興味深いのは、内積が定矩されおいる堎合のベクトルず線圢圢匏の間の同型です。぀たり、ベクトルvをスカラヌにマッピングするすべおのfに察しお、 wが存圚したす。その結果、 f(v) = dot(w,v)の任意のためのv 。 ただし、共ベクトルは内積倚次元関数の募配などを参照せずに存圚できたす。

コンピュヌタヌ䞊でこれらすべおのオブゞェクトを衚すには、通垞、基底を遞択し、行列代数を䜿甚しおこれらのほずんどを衚すこずができたす。 ぀たり、埌続のシングルトン次元nx1行列ずしおのベクトル、1x1行列ずしおのスカラヌなどに柔軟に察応できる堎合にのみ、行列の乗算ず転眮が必芁になりたす。 これはMatlabの芋解であり、特に数倀線圢代数で倚くの本や論文が曞かれおいる方法でもありたす。

その堎合、ベクトルから共ベクトルぞの前述の同型写像暗黙的にナヌクリッド内積を仮定は、ベクトルの行列衚珟の転眮耇玠数の堎合ぱルミヌト共圹を取るこずに察応したす。 ただし、抜象的な意味では、ベクトルの転眮の抂念はありたせん。これが、 @ GaborOszlanyiで述べられおいるように、Fortranで定矩されおいない理由

Juliaコヌドでは型の安定性が重芁であるため、Matlabの「唯䞀の行列」柔軟な末尟のシングルトン次元を䜿甚アプロヌチはうたく機胜したせん。 しかし、完党に抜象的な蚭定に移行しお、通垞の蚭定ナヌクリッド内積、ベクトルからコベクトルぞの簡単なマッピングなどで䜜業を続けたくもありたせん。 最終的にコヌドを蚘述し、ASCII文字を䜿甚したいので、蚘号* 、 ' 、および.'から可胜な限り絞り出す必芁がありたす。 幞いなこずに、これは耇数のディスパッチが圹立぀堎所であり、䞊蚘のさたざたな提案に぀ながりたす。 これに぀いお、぀たり、抜象的な線圢代数挔算が特定のゞュリアメ゜ッド関数ではないにどのように倉換されるかに぀いお衚を䜜成したした。

@GaborOszlanyiぞの最埌のメモずしお、私はただこれらすべおにv*Aの堎所を芋぀けられたせん。 これは、ベクトルがデフォルトで行行列ずしお瀺されるフィヌルドでは暙準的な堎合がありたすが、個人的にはこれは奇劙な遞択だず思いたす。 線圢写像fずgがf(v) = v*Aずg(v) = v*Bずしお機胜する堎合、これはg(f(v)) = (g ◩ f)(v) = v*A*Bを意味したす。亀換されたす。 リンクされたテヌブルの最埌から2番目の行のように、これを䞍完党な内積ずしお解釈できたす。

あなたの芁玄は深くお説埗力がありたす。
よく説明しおいただきありがずうございたす。

残りの質問は2぀だけです。

  • この培底的な議論の結果、ゞュリアでは実際にどのような倉化が起こるでしょうか
  • なぜFortranはv*mxにmatmul v*mxを実装したのですか

この問題によっお明らかになる2぀の問題がありたす。

A.応甚数孊者は、2぀の自然な同型写像を暗黙的に利甚するハりスホルダヌ衚蚘法に瞛られおいたす。

  1. Nx1行列はベクトル空間を圢成するため、長さNのベクトルはNx1_列行列_ず区別できたせん。  "columnify"、▯
  2. 1x1行列はスカラヌのすべおの代数的特性で定矩できるため、1x1行列はスカラヌ数ず区別できたせん。 「スカラヌ化」、■

問題は、これらの同型写像のどちらもJuliaの型で衚珟するのが自然ではなく、どちらも配列圢状の実行時チェックを䌎うこずです。 MATLABの埌続のシングルトン次元ルヌルは、これらの同型の䞡方の実装ず考えるこずができたす。

B. 2次元配列は、配列の配列ずしお再垰的に定矩できたす。 ただし、行列は列の行たたは行の列ですが、行の行たたは列の列ではありたせん。 行列を再垰的に定矩できないずいう事実は、行列ずn次元配列の異なるテン゜ル構造を匷調しおいたす。 正しく蚀えば、倚次元配列は非垞に限られた皮類のテン゜ルであり、埌者を実装するために必芁な完党な機構を欠いおいたす。 厳密に蚀えば、瞮玄はベクトル空間ずその双察のペアに察する操䜜であるため、双察ベクトル空間の抂念を呌び出すこずのない倚次元配列のむンデックスの瞮玄に぀いお話すのは誀った呌び方です。 ほずんどの人は完党な機械を望んでいたせん。これには、行/列の性質を持぀共倉性/反倉たたは䞊/䞋のむンデックスに぀いお心配する必芁がありたす。 代わりに、ほずんどの人は、配列がすべおの次元で完党に逆倉であり、_2次元を陀いお_、2次元配列を行列の代数ダりンアップテン゜ルを持぀ものず考えたいず考えおいたす。ダりンダりン、アップアップ、たたはアップダりンテン゜ル。 蚀い換えれば、2次元配列は特殊なケヌスになりたいのです。


そうでなければ私はただ説埗される可胜性がありたすが、これが私の珟圚の3郚構成の提案です

aベクトルの転眮を完党に犁止し、 u'v 、 u*v' 、 u'*A*v 、 u'*A*v/u'vなどのハりスホルダヌスタむルの匏を䜜成するために、ナヌザヌがベクトルを列行列に明瀺的に倉換する必芁があるuずvが真のベクトルである堎合、特別なTransposedVectorを導入せずにu'やu'*Aような郚分匏を䞎えるこずはできたせん。 TransposedVectorタむプ。論理的垰結ずしお、倚次元配列がテン゜ル構造のアップ/ダりンむンデックスに぀いお心配する必芁がありたす。これは、支払うには高すぎるようです。

aの制限は、すべおのHouseholderスタむルの匏が真のスカラヌの代わりに1x1行列を生成するこずですこれは、1ベクトルを返すu'vよりも倧幅に改善されおいたす。したがっお、 (u'*v)*wような匏は

b次のようなベクトルに察する類䌌の挔算の代替衚蚘法を導入したす。

  • 内偎ドット積のu ⋅ v = scalarize(columnify(u)'*columnify(v))
  • アりタヌクロネッカヌ積のu ⊗ v = columnify(u)*columnify(v)'
  • A(u, v) = scalarize(columnify(u)'*A*columnify(v)) 、双線圢圢匏の叀い衚蚘
  • 二次圢匏の堎合はA(u) = A(u, u)

bの匏は、内積および双線圢/二次圢匏の匏を自動的にスカラヌ化するこずにより、aの匏ずは異なり、1x1行列の圢成を回避したす。

c1x1行列を真のスカラヌに倉換できるようにしお、次のようなコヌドを䜜成したす。

M = Array(Int, 1, 1, 1)
a::Int = M

動䜜する可胜性がありたす。 必芁なのは、次のような配列サむズの実行時チェックを行うこずだけです。

function convert{T}(::Type{T}, A::Array{T,N})
    if length(A) == 1
        return A[1]
    else
        error()
    end
end

この提案は、玄2幎前にFolkmarBornemannによっお提案されたものを少し倉曎したものです。 私たちが詊したずころ、実行時チェックのコストはそれほど倧きくなく、䞀般的な割り圓おではなく、型匷制割り圓お実際にはconvert停装呌び出しでのみ呌び出されたした。

@jiahao 、この投皿の読みやすさは、レンダリングが難しい文字によっお制限されおいたす。 通垞、フォントにほが完党にUnicodeが含たれおいるOSXでは正しく衚瀺されたせん。

@jiahao 、私は確かにそのほずんど/すべおに同意するこずができ

特別なTransposedVectorタむプを導入せずに、論理的垰結ずしお、倚次元配列がテン゜ル構造のアップ/ダりンむンデックスに぀いお心配する必芁がありたす。これは高すぎるず思われたす。

あなたがしたい堎合にのみ、私には論理的垰結だTransposedVectorのサブタむプAbstractArray私は蚈画ではなかったず仮定階局、いく぀かのずは異なり、 LazyTranspose真のタむプどのは別の皮類のAbstractMatrix 。

アりタヌクロネッカヌ積のu ⊗ v

暗黙の同型写像に䟝存せず、行列挔算をベクトル挔算やより抜象的な積からきれいに分離するこずが目暙である堎合、これは次の理由で倱敗するず思いたす次の数孊的定矩に関する普遍的な合意に぀いおはわかりたせん。

  • クロネッカヌ積A ⊗ Bは、ベクトルではなく行列で定矩された挔算です。
  • したがっお、 u ⊗ vを2぀のベクトルのテン゜ル積ずしお読み取る代わりに、これにより、ダりンダりンタむプの2次元テン゜ルが生成されたす。 適切な「行列」を取埗する唯䞀の方法は、ベクトルずコベクトルのテン゜ル積を取るこずです。 しかし、これらのオブゞェクトの導入を避けたいので、関係する2぀のベクトルを列化する前にこの操䜜の結果を取埗するこずは䞍可胜のようです。
  • u ⊗ vの3番目の名前は、通垞はだらしなく定矩されおいる倖積であり、䞊䞋に関しお受け入れられおいる厳密な定矩があるかどうかはわかりたせん。 䞀郚の情報源は、2぀のベクトルのテン゜ル積、぀たり前のポむントず同等であるず述べおいたす。 代わりに、「倖積」が2番目のベクトルをコベクトルに暗黙的にマッピングしおダりンアップテン゜ルを取埗するこずも意味する定矩を受け入れる堎合、問題はありたせん。

代わりに、ほずんどの人は、配列を単玔な叀いコンテナヌにし、2次元を陀くすべおの次元で完党に反倉にするこずを望んでいたす。

栞の遞択肢を怜蚎したしたか 線圢代数を最初からやり盎し、 AbstractVectorずAbstractMatrixの型゚むリアスを完党に削陀しお、次のように眮き換えたす。

abstract AbstractVector{T} <: AbstractArray{T,1}
abstract AbstractMatrix{T} <: AbstractArray{T,2}

# and we could introduce:
abstract AbstractCoVector{T} <: AbstractArray{T,1}

フォヌルアりトがたくさんあるこずは理解しおいたすが、倚次元ストレヌゞ配列ず線圢代数が明確に分離される可胜性がありたす。 完党な倚次元テン゜ル代数、双察ベクトル空間などを実装する必芁はありたせん。ベクトル、共ベクトル、行列など、倚くの人が必芁ずするビットを実装する必芁がありたす。 内積、倖積、covector-matrix補品、matrix-vector補品、matrix-matrix補品を取埗したす。 転眮は、䞊蚘のすべおで定矩されおいたす。 1D配列の1D配列を実際に䜿甚するAbstractMatrix実装を䜜成できたすもちろん、デフォルトの実装ではありたせん。 Householder衚蚘IMHOはMATLABの匱点の1぀ですを䜿甚する必芁はありたせんが、線圢代数のすべおの䟿利さを埗るこずができたす。

これを提案するのは少し緊匵したすが、ゞュリアは、ハりスホルダヌの慣習にフォヌルバックする必芁なしに、ほずんどの人が倧孊レベルの線圢代数などで孊ぶこずの「正しい」モデルを暡倣できるず思いたす。 明確に区別するこずで、 Base.LinAlgを「暙準ラむブラリ」パッケヌゞに移動するのも簡単になるかもしれたせん。これはJuliaの長期的な目暙だず思いたすか たた、新しい1Dサむズ倉曎可胜なリストのようなものが新しいBuffer倉曎ずArrayネむティブ実装に付属するずいう考えずもよく䞀臎するため、この䞀般的な「リスト」タむプJuliaのコア郚分の倚くでVectorを眮き換えるこずができ、 Arrayず「リスト」をかなり早く定矩しながら、 LinAlgパッケヌゞをかなり遅くロヌドできたす。

すでに「ダミングダりン」されおおり、適切な線圢代数ではなく、Fortran配列で衚珟されおいるアルゎリズムが倚数存圚したす。 Juliaは、倚次元配列の䞊に線圢代数構造を再発芋たたは匷制する必芁なしに、これらのアルゎリズムを実装できる必芁がありたす。

私の仕事では、テン゜ルや共倉性ず反倉のむンデックスなどをFortran配列にマッピングする適切な線圢代数がおそらく最適です。 この䜜業を行うために、そしお人々を混乱させないために、私は「ベクトル」、「マトリックス」、「配列」ずいう甚語をそのたたにしお、それらを䜎レベルに保ち、他のより掟手な甚語をすべおの高レベルに䜿甚したす。 䞊蚘の䞊䜍レベルは、抜象型たたはパラメヌタヌ化のいずれかを介しお、ストレヌゞオプションも抜象化する必芁がありたす。 たぶん、接頭蟞LAは、これを衚珟する方法です。

LA.Vector
LA.CoVector
LA.Tensor{... describing co/contravariance of indices ...}

次に、ベクトルず行列は玔粋にストレヌゞに䜿甚されたす。 䜎レベルでは、転眮は手動で管理されたすBLASず同じ。 高レベルでは、自動的に凊理されたす。

これは、䞋䜍互換性を壊さず、Matlab / Fortran / numpy convertの期埅を壊さないこずを陀いお、 @ andyferrisの提案に近いもの

@eschnettこのスレッドの前半で、ベヌスのJuliaではなく、倚重線圢代数をパッケヌゞに残すこずが決定されたず思いたす。 あなたが提案するようなこれらのアむデアの倚くは、型システム内のテン゜ル、ベクトル空間、共/逆分散などを扱う新しいパッケヌゞで具䜓化できるず思いたす。これは、䟿利な関数を提䟛する_TensorOperations.jl_パッケヌゞずは倚少異なりたす。テン゜ルであるかのように配列を乗算したす。 開発するのは難しいず思いたすが、朜圚的に䟡倀のある抜象化です

MatrixずVectorをそのたたにしおおくこずに関しおは、おそらく珟圚の定矩は完璧であるか、暙準的な数孊を䜿甚しお行列を乗算し、ベクトルを転眮したい人々のために私たちができるより良い䜕かがあるかもしれたせん衚蚘。 システムが明癜で雄匁であり、他の蚀語での_改善_であれば、簡単に習埗できるはずですが、新しいナヌザヌに小さな孊習曲線を远加する可胜性があるず思いたす。

䞀般的な非ナヌクリッド耇玠ベクトル空間Vは、 V 、 conj(V) 、 dual(V) 、 conj(dual(V)) 4぀の関連空間があるこずに泚意しおください。 したがっお、䞀般的なテン゜ルには4皮類のむンデックスがありたす通垞、䞊たたは䞋、犁止たたは犁止なしずしお瀺されたす。 耇雑なナヌクリッド空間量子力孊などでは、 dual(V) ≡ conj(V)ずconj(dual(V)) = V 。 実際の非ナヌクリッド空間䞀般盞察性理論などでは、 V ≡ conj(V) 。 埌者の堎合の䞡方で、アップむンデックスずダりンむンデックスのみが必芁です。

実際のナヌクリッド空間ほずんどのアプリケヌションでは、それらはすべお同等であり、テン゜ルを衚すにはゞュリアの単玔な配列で十分です。 したがっお、少なくずも実数の堎合、次の2぀の操䜜により、完党で䞀貫性のあるテン゜ル代数を構築できたす。

  • コントラクト/内積∙ 。これは、次のルヌルを䜿甚しおランクN任意の配列に䞀般化できたす。最初の配列の最埌のむンデックスを2番目の配列の最初のむンデックスたたはnumpyのdot芏則ですが、盎感的ではありたせん、 AずBランクがM堎合、 A ∙ BはランクM+N-2配列を返したす。 MおよびランクN 。
  • テン゜ル積⊗  A ⊗ BはランクN+M配列を返したす

ベクトルv 、 wおよび行列A 、 Bに特化しおいるため、次のすべおを蚘述できたす。

  • ベクトル内積v ∙ w ->䟋倖的に、ランク0の配列ではなくスカラヌを返したす
  • 行列ベクトルの乗算A ∙ v
  • 行列行列の乗算A ∙ B
  • テン゜ル/倖積v ⊗ w
  • コベクトル===ベクトル行列の乗算v ∙ A

∙に*を䜿甚したい堎合もありたすが、萜ずし穎は、䞊蚘の∙定矩が結合的ではないこずです。 (A ∙ v) ∙ w ≠ A ∙ (v ∙ w)は、埌者でもないためです。定矩されたす。

しかし、繰り返しになりたすが、それは、耇雑な配列を無芖しおも構わないず思っおいる堎合に限りたす。

テン゜ルの完党に䞀般的な実装に関しおは、スタックに割り圓おられたタプル、生成された関数、およびおそらく今日それをより実珟可胜にする他のすべおの機胜が存圚する前に、私はこれをずっず前に開始および攟棄したした。

興味深いアプロヌチ、@ Jutho。 十分盎感的に思えたす。 *ず'で䜕をするかに関係なく、これらの定矩を远加できるず私は_掚枬_しおおり、それをサポヌトしたす。

しかし、繰り返しになりたすが、それは、耇雑な配列を無芖しおも構わないず思っおいる堎合に限りたす。

手動で挿入されたconj()修正したす。 そしお、ゞュリアは耇雑な行列を無芖したいずは思わないでしょう

AbstractMatrixをタむプ゚むリアスではなく特別なサブタむプずしお䜿甚するこずに぀いお、さらにいく぀か気づきたした。

matrix[:,i] -> AbstractVector{T}
matrix[i,:] -> AbstractCoVector{T}
array_2d[:,i] -> AbstractArray{T,1}
array_2d[i,:] -> AbstractArray{T,1}

これはかなりクヌルです-行列のむンデックスから列ず行のベクトルを取埗できたす。 2Dストレヌゞコンテナの堎合は、1Dストレヌゞアレむを取埗したす。 すべおのナヌスケヌスをカバヌする必芁がありたす たた、 AbstractVector{T} <: AbstractArray{T,1}ずAbstractCoVector{T} <: AbstractArray{T,1}䞡方があるため、APLスラむシングルヌルを䜿甚したAbstractArrayむンタヌフェむスに埓いたす。

1぀の「興味深い」事実は

array_3d[:,:,i] -> AbstractArray{T,2}
matrix(array_3d[:,:,i]) -> `AbstractMatrix {T}

そのため、結果を行列乗算する堎合は、手動で行列ずしおラップする必芁がありたす。 これはプラスかマむナスか、わかりたせん。 しかし、これは朜圚的な問題の1぀であるように思われ、ストレヌゞず線圢代数を混同する他の蚀語のナヌザヌが簡単に䜿甚できるようにするこずに぀いお

これはばかげた質問かもしれたせんが、 @ juthoは、コヌドの蚘述はASCIIによっお制限されおいるず前述したした。 なぜ䞖界で、1963幎に開発され、1986幎30幎前に最埌に曎新された7ビットの文字セットに制限されおいるのでしょうか。 これは、有名な640KBが1981幎にPCで利甚可胜な最倧RAMであった時代でした。今日のコンピュヌタヌ垂堎では、珟圚、32GBのRAM以前の最倧倀の50,000倍を備えた64ビットプロセッサが䞀般的に販売されおいたす。 64ビットプロセッサの理論䞊の制限。 では、なぜ40幎前に開発された文字セットに限定しおいるのでしょうか。

ナニコヌドを䜿甚できたすが、残念ながら、キヌボヌドのサむズは過去40幎間、通垞の人が持っおいる指の数過去10000幎以䞊も同様の芁因で拡倧しなかったこずを芚えおおいおください。

私芋、ASCIIは䌑たせる必芁がありたす。 高速な数孊シンボルプログラミングのための特別な数孊キヌボヌドは、実際には良い考えです UTFに付属するシンボルをこれ以䞊䜿甚しない正圓な理由はありたすか ASCIIから可胜な限りすべおを搟り出そうずする苊痛を正圓化できたすか

@ esd100 このような非垞に投機的な議論には、このGitHubの問題を䜿甚しないでください。

@Johnmyleswhite。 「投機的」ずはどういう意味かわかりたせん。 それがあなたが䜿う぀もりだった蚀葉だず確信しおいたすか 蚀語、挔算子、機胜は䜿甚されおいる蚘号に関連しおいるように芋えるので、ASCIIず他の䜕かの䜿甚が議論に関連しおいるず思いたした。 私は決しお専門家ではありたせんが、察凊されおいる機胜に関連しお議論するか、少なくずも明確にするこずに関する問題のようです。

぀たり、蚀語を垌望どおりに定矩できない理由はありたすか基本的な目暙である䜿いやすさ、速床を念頭に眮いお 特別な蚘号/単語を䜿甚するず、蚀語がより豊かで矎しくなりたせんか

2぀のUnicodeの蚘号を䜿甚しお䟋えば@Juthoさんの最新のコメントが奜評ず@yuyichaoは、我々はUnicodeを䜿甚できるこずに同意したこず@ ESD100しおくださいノヌト。 より倚くのUnicodeのみの挔算子を導入するこずに぀いおの他の提案がありたす䟋えば、関数を構成するための構成蚘号、17184。 人々があなたに反察しおいるずは思いたせんが私たちは心に留めおおくべき実際的な考慮事項がありたすが、あなたが_特定の_、トピックに関する提案がある堎合は私たちに知らせおください。

v0.5でのこの新しい動䜜に少し混乱しおいたす。これは、この議論から生じたず思いたす。

julia> [ x for x in 1:4 ]' # this is fine
1×4 Array{Int64,2}:
 1  2  3  4

julia> [ Symbol(x) for x in 1:4 ]' # bit this isn't? What is special about symbols?
WARNING: the no-op `transpose` fallback is deprecated, and no more specific
`transpose` method for Symbol exists. Consider `permutedims(x, [2, 1])` or writing
a specific `transpose(x::Symbol)` method if appropriate.

リスト内包衚蚘から数倀以倖の行ベクトルを䜜成するにはどうすればよいですか 行ベクトルである必芁がありたす。 これは別の問題ずしお、たたは他の堎所で議論する方が良いでしょうかどこに投皿すればよいかわかりたせんでした...

reshapeを䜿甚できたす reshape(v, 1, length(v)) 。 たぶん、これは非掚奚の譊告でも蚀及されるべきですか 転眮は数孊挔算であるため、数孊的なベクトル/行列に察しおのみ定矩する必芁があるずいう考えだず思いたす。

それはdepwarnで蚀及されおいたす permutedims(x, [2, 1]) 。

permutedimsはベクトルに察しおは機胜したせん。 この真新しい問題を参照しおください18320

転眮は数孊挔算であるため、数孊的なベクトル/行列に察しおのみ定矩する必芁があるずいう考えだず思いたす。

これは私には意味がありたせん。 これは議論の䜙地がありたすか 本圓に正圓な理由がない限り、私は本圓に転眮しお非数倀配列で䜜業するこずを奜みたす。

転眮は数孊挔算であるため、数孊的なベクトル/行列に察しおのみ定矩する必芁があるずいう考えだず思いたす。

これは私には意味がありたせん。 これは議論の䜙地がありたすか 本圓に正圓な理由がない限り、私は本圓に転眮しお非数倀配列で䜜業するこずを奜みたす。

私は、あなたが望むものを満足させるこずは比范的耇雑であり、数孊にずっお意味があるず思いたす。 数孊的な意味では、転眮は、ベクトル空間ずベクトルたたは行列のそれらの双察空間を亀換するこずによっお定矩されるこずがよくありたすたあ、転眮ず共圹転眮にもいく぀かの耇雑さがありたす。 ハミング数の行列Mの堎合、転眮はpermutedims(M, (2,1))になりたすが、䞀般に、次のようなサブ行列の芳点から「ブロック」行列を定矩できたす。

M = [A B;
     C D]

ここで、 Aなどは行列そのものです。 私の理解では、ゞュリアは

M' = [A' C';
      B' D']

これは、ペンず玙の数孊を䜿甚しお行うこずであり、したがっお「望たしい構文」です。

これは、行列の芁玠が'ず.'を受け入れる必芁があるこずを意味したす。 数倀の堎合、これらはそれぞれ耇玠共圹ず無挔算ずしお定矩されたす。 IMHOこれは䟿利な駄排萜だず思いたすが、機胜し、最も重芁なのは、_simple_ルヌル「転眮は再垰的」- BlockMatrixクラスなどを必芁ずするのではなくで実装されるこずです。 しかし、この転眮の駄排萜は、あたり意味がないため、0.5では非数倀タむプから削陀されたした。 Symbolの転眮は䜕ですか

数倀ではなく_data_がある堎合、 permutedimsは、その意味ず動䜜が完党に明確に定矩されおいたす。぀たり、再垰的ではありたせん。 .'ような数孊の駄排萜を䜿甚するず、数文字の入力を節玄できたすが、他の誰か数孊やMATLABにあたり詳しくない人がコヌドを䜿甚しおいる堎合は、コヌドを読む方が理にかなっおいたす。必芁に応じおreshapeずpermutedims 。 _私にずっお、これは_最も_重芁なポむント_です。

私芋では、この非垞に長い問題は、線圢代数の数孊的に䞀貫したむンタヌフェヌスを䜜成するこずに関するものであり、結果ずしおデヌタの配列の数孊的なしゃれが少なくなるのは自然なこずのようです。

思いやりのある察応をありがずう。 私はただかなり匷く反察したす

しかし、この転眮の駄排萜は、あたり意味がないため、0.5では非数倀タむプから削陀されたした。 シンボルの転眮ずは䜕ですか

Symbolの転眮をno-opずしお定矩するこずは、実数で転眮を定矩するこずよりも意味がないかどうかわかりたせん。 「しゃれ」は䟿利だず思いたすが、「適切な」こずは、ベクトルず行列に察しおのみ転眮を定矩し、 transpose(A::Matrix{Complex}) conjをの䞀郚ずしお

.'ような数孊の駄排萜を䜿甚するず、数文字の入力を節玄できたすが、他の誰か数孊やMATLABにあたり詳しくない人がコヌドを読んでいる方がはるかに理にかなっおいたす。必芁に応じお圢状を倉曎し、䞊べ替えたす。 私にずっお、これが最も重芁なポむントです。

.'は慎重に䜿甚する必芁があり、 transposeをより明瀺的に呌び出す方がよい堎合が倚いこずに同意したす。 reshapeずpermutedimsは、そもそも読み取りずコヌディングを行うために、取るに足らない量の認知オヌバヌヘッドを必芁ずする可胜性があるず思いたす。 正盎に蚀うず、解析が速くなりたす。

transpose([ f(x) for x = 1:length(A) ])
reshape([ f(x) for x = 1:length(A) ], 1, length(A))

このような単玔な堎合でも、䜕が起こっおいるのかを理解するために、行の最初 reshapeを読み取るから最埌 length(A)を読み取るたでバりンスする必芁がありたす。 次に、 length(A)が最初に存圚する理由を理解するために、途䞭に戻っお䜜業する可胜性がありたす。

私にずっお、より倧きな問題は、私が新しいJuliaである堎合぀たり、以前にnumpyずMATLABを䜿甚したこずがある、これが機胜するこずです。

[ x for x = 1:10 ]'

文字列や蚘号などの配列でも同じこずが機胜するず圓然想定したす。 .'のセマンティクスを理解するために長いオンラむンディスカッションを読む぀もりはありたせん-私はいく぀かのこずを詊しお、過去の経隓から䞀般化/掚枬したす。 おそらく、より良い゚ラヌメッセヌゞがあるずここで圹立぀でしょう。

党䜓ずしお、 Symbolやその他の非数倀入力でno-op転眮を維持するこずが、ここで提案されおいる優れた数孊的フレヌムワヌクにどのように干枉するかはわかりたせん䟡倀のある目暙です。 しかし、ノヌオペレヌションを維持するこずは無害のようです。

しかし、ノヌオペレヌションを維持するこずは無害のようです。

すべおがAnyサブタむプであるため、 Anyに察しお意味のあるものを定矩するこずはできたせん。 定矩transpose(x)=xは、どの皮類の行列に察しおも明らかに間違っおおり、サむレント゚ラヌの䞀郚を回避するために、これらの定矩を远加'を完党に非数孊的な挔算で蚱可するこずず、サむレント゚ラヌを回避するこずのトレヌドオフです。

シンボルの転眮をno-opずしお定矩するこずが、実数で転眮を定矩するよりも意味がないかどうかはわかりたせん。 「しゃれ」は䟿利だず思いたすが、「適切な」こずは、ベクトルず行列に察しおのみ転眮を定矩し、 transpose(A::Matrix{Complex}) conjをの䞀郚ずしお

私は完党に同意したせんが、ある皮のBlockMatrixを実装するか、 Matrix{M<:Matrix}に察しお特別なメ゜ッドを定矩する必芁がありたす。 どちらが人気のあるアむデアかわかりたせんか これは、これらの関連する問題のいく぀かを単玔化する可胜性があるため、フォロヌしおいる人にずっおは深刻な質問です。

正盎に蚀うず、解析が速くなりたす。

transpose([ f(x) for x = 1:length(A) ])
reshape([ f(x) for x = 1:length(A) ], 1, length(A))

2぀目は、ゞュリアの珟圚のベクトルの転眮ずは関係がないためです明らかに、_私はベクトルの転眮を取りたす_rowvec = reshape(colvec, (1, n))ず蚘述したす。 [f(x) for _ = 1:1, x = 1:n]は、最初から正しい圢を䜜るように理解を匷制したす。たたは、 .'が本圓に奜きな堎合は、 map(f, (1:n).')ずf.((1:n).')珟圚機胜したす。

これは、完党に非数孊的な操䜜のために比范的奇劙な構文を蚱可するずいう䟿利さず、サむレント゚ラヌを回避するこずの間のトレヌドオフです。

これがサむレント゚ラヌやその他の問題を匕き起こしおいた堎合、私はおそらくこの議論を倱うこずになるず思いたす。 なぜ゚ラヌが発生するのかわかりたせんが、私はあなたを信じおいたす。䞀方、...

ある皮のBlockMatrixを実装するか、Matrix {M <Matrix}に察しお特別なメ゜ッドを定矩する必芁がありたす。

私は間違っおいるかもしれたせんが、あなたは2番目を行う必芁があるず思いたす。それは私にずっお合理的な遞択肢のようです。 しかし、これは私の絊䞎氎準を䞊回り始めおいたす。

[_ = 11、x = 1nの堎合のfx]

これを忘れた これはおそらく私がやるこずになるこずです。 党䜓的に、私はただ読みやすいコヌドに察するあなたの奜みに同意したせんが、それぞれ圌/圌女自身に ¯\_(ツ)_/¯

明らかに、私はベクトル転眮を真剣に受け止めおいたす

はい。 私はそう思う。 😉

これhttps://github.com/JuliaLang/julia/issues/16790でも、 transpose代わりにreshape 、少し味が良くなりたす。

私は間違っおいるかもしれたせんが、2番目を実行する必芁があるず思いたす線集 Matrix{M<:Matrix}に察しお特別な転眮メ゜ッドを定矩したす。これは私には合理的なオプションのようです。

残念ながら、デヌタず線圢代数の違いに再び戻りたす。 線圢代数ブロック行列に再垰的転眮を持たせたいが、2Dデヌタ配列の䞀般的な2Dデヌタ配列には再垰的転眮を持たせたくない...しかしMatrix{T}ずArray{T,2}は同じものですが、私たちはできたせんそれを行う。

これ16790は、転眮の代わりにreshapeを䜿甚するこずで、私にずっお少し口圓たりが良くなりたす。

本圓!!

線圢代数ブロック行列に再垰的転眮を持たせたいが、2Dデヌタ配列の䞀般的な2Dデヌタ配列には再垰的転眮を持たせない

これは私が明らかに望んでいるこずではないようです...これらの異なる皮類の転眮を凊理するための2぀の異なる関数を持っおいないのはなぜですか 線圢代数オブゞェクトずデヌタオブゞェクトの間に非垞に厳密な区別があるずいうメモを芋逃したず思いたす。

このスレッド党䜓を読むのは倧倉な䜜業のように思えたすが、さらにコメントする前にそうする必芁があるかもしれたせん。 知らないうちにノむズを加えたくない。

線圢代数オブゞェクトずデヌタオブゞェクトの間に非垞に厳密な区別があるずいうメモを芋逃したず思いたす。

線圢代数オブゞェクトずデヌタオブゞェクトの間に厳密な区別はありたせん。
珟圚の実装でも、理想的な䜿甚でもありたせん。

存圚する堎合、サむズの倉曎 push! たたは線圢代数オブゞェクトの倀の倉曎はサポヌトされたせんそのようなナヌザヌはStaticArrays.jlなどを䜿甚したす。 broadcastのみがサポヌトされたす。線圢代数オブゞェクトでサポヌトされたす。
デヌタオブゞェクトは、拡匵、倉曎可胜ずなり、か぀支持するだろうmap 、およびreduce 、およびfilter ではなくbroadcast 。

しかし、私たちは人々がデヌタオブゞェクトのバむナリず線圢代数オブゞェクトのどちらかを考えおいる䞖界にいたせん。
したがっお、この2。5幎、340コメントスレッド。


no-op転眮に぀いお。
型階局の非垞に高い䜍眮に、 ScalarずNonscalar抜象型を远加できたす。
Scalarsすべお、操䜜なしの転眮ぞのフォヌルバックです。
Nonscalarsはフォヌルバックはありたせんただし、珟時点では非掚奚の譊告にフォヌルバックしたす

数字、文字、文字列、そしおおそらくタプルでさえScalarなり、操䜜なしの転眮が定矩されたす。 䞀郚のスカラヌ、たずえば耇玠数は、この転眮の定矩を䞊曞きしたす。

配列行列、ベクトルなどは、 Nonscalarサブタむプであり、再垰的な転眮を持ちたす。

それが奜きかどうかはわかりたせん。

最近の䞀連の投皿は、1832013171131578974の_matrixtranspose_および "scalar"タむプに関する議論を再構築しおいたす。

transpose(x)=x no-opフォヌルバックは無害であるずいう考えを本圓に払拭したいず思いたす。 私の考えでは、フォヌルバックは、最適化されたアルゎリズムよりもゆっくりず、正しい結果を生成するはずです。 フォヌルバックメ゜ッドが誀った答えをサむレントに蚈算する堎合、フォヌルバックに正しいセマンティクスがないこずを意味するため、危険です。 transpose(x)は、 xタむプに応じお異なる意味を持ちたす。

no-op転眮フォヌルバックは、行列の行列に察しお間違っおいるだけでなく、 AbstractMatrixサブタむプではないすべおの行列のようなオブゞェクトに察しおも間違っおいたすこれは、987によっお、゚ントリが明瀺的に栌玍されおいるこずを意味したす。それらが行列の代数を持っおいるこず。 これが1぀のポスタヌの子の䟋ですかなりの数がありたす

julia> A = rand(5,5); F = qrfact(A); R = F[:R]; Q = F[:Q] #Q is an example of a matrix-like object
5x5 Base.LinAlg.QRCompactWYQ{Float64,Array{Float64,2}}:
 -0.518817    0.0315127   0.749223    0.410014  -0.0197446
 -0.613422   -0.16763    -0.609716    0.33472   -0.3344   
 -0.0675866   0.686142    0.0724006  -0.302066  -0.654336 
 -0.582362   -0.0570904   0.010695   -0.735632   0.341065 
 -0.104062    0.704881   -0.248103    0.295724   0.585923 

julia> norm(A - Q*R) #Check an identity of the QR factorization
8.576118402884728e-16

julia> norm(Q'A - R) #Q'A is actually an Ac_mul_B in disguise
8.516860792899701e-16

julia> Base.ctranspose(Q::Base.LinAlg.QRCompactWYQ)=Q; #Reintroduce no-op fallback

julia> norm(ctranspose(Q)*A - R) #silently wrong 
4.554067975428161

この䟋は、䜕かがAnyサブタむプであるからずいっお、それがスカラヌであり、操䜜なしの転眮があるず想定できるこずを意味するわけではないこずを瀺しおいたす。 たた、OPの芪の問題を解決するのが非垞に難しい理由も瀺しおいたす。 行列のような非配列オブゞェクトQの堎合、 Q'は配列操䜜ずしおの実際の意味はありたせんが、明確な代数的意味がありたす。 Q'Aような匏は完党に明確に定矩されおいたす。 線圢代数ではなく配列を扱う他の人々は、単に非再垰的な䞊べ替えを必芁ずし、行列のような非配列を気にしたせん。 それにもかかわらず、すべおのタむプの代数的セマンティクスず軞亀換セマンティクスの䞡方の䞀貫したスペルを持぀こずはできないずいう事実が残っおいたす。

たぶん私は密集しおいたすが、比范は次のようになるず思いたした。

julia> A = rand(5,5); F = qrfact(A); R = F[:R]; Q = F[:Q]
julia> Base.ctranspose(Q::Any) = Q;
WARNING: Method definition ctranspose(Any) in module Base at operators.jl:300 overwritten in module Main at REPL[6]:1.
julia> norm(ctranspose(Q)*A - R) # still works fine
4.369698239720409e-16

この方法でtransposeを䞊曞きするず、 transpose([ :x _=1:4 ])が蚱可されるようです。぀たり、私が投皿した内容です。 transpose / ctransposeを必芁ずするすべおのものたずえばQRCompactWYQ に正しく実装しおいる限り、フォヌルバックが呌び出されるこずはないず思いたしたより具䜓的な呌び出しのため䜜るこずができたす。

あなたのコヌドはあなたが曞いたctransposeメ゜ッドを呌び出しおいたせんこれは@which確認できたす。 Julia v0.5v0.4には存圚したせんで別のフォヌルバックメ゜ッドを呌び出しおいたす。これは基本的にctranspose(full(Q))たす。 この他のフォヌルバックは正しいですが、私たちがこの掟手なQタむプを持っおいる理由そのものを打ち負かしたすそれで乗算を正確に行うこずができたす。 フォヌルバックは正しいはずだずいう私のコメントはただ残っおいたす。

はい、すべおの移調を正しく実装しおいる限り、
もちろん、フォヌルバックは害を及がしたせん。 害はあなたがしないこずです
それを忘れるずメ゜ッド゚ラヌは発生したせんが、黙っお間違っおいたす
結果。

クリックしおくれた@toivohに感謝したす。 説明ありがずうございたす。

しかし、フォヌルバックtranspose(X::AbstractMatrix)関数ずtranspose(X::AbstractVector)関数を定矩するず、おそらく垞に正しい結果が埗られたすたずえそれが遅くおも...たずえばfullを呌び出すいいえ そしお、あなたはい぀でもそれをより良く/より速くするためにもっず専門的な関数を曞くこずができたす。 そうすれば、 transpose(::Any)は、前述の「駄排萜」以倖のサむレント゚ラヌを匕き起こしおはなりたせん぀たり、 Complex数倀を凊理するずき...倚分私が知らない他のスカラヌナヌスケヌス

歎史的な理由からQRCompactWYQ <: AbstractMatrixですが、98710064によるず、このサブタむプの関係は正しくないため、削陀する必芁がありたす。

行列のような非配列の別の䟋はIterativeSolvers.AbstractMatrixFcn 、これはAbstractMatrixサブタむプではありたせん。 このタむプの堎合、参照するフォヌルバックがディスパッチされるこずはありたせん。これも私の䞻なポむントです。

このディスカッションはhttps://github.com/JuliaLang/julia/issues/13171で継続する必芁があり

「チヌム線圢代数」の誰かがステップアップしお、0.6でこれに぀いお䜕かをするこずにコミットする必芁がありたす。そうしないず、再びぶ぀かりたす。

では、再起動するには、実際の蚈画は䜕ですか

私の考え方は次のようになりたす transpose(v::AbstractVector) = TransposedVector(v)ここでTransposedVector <: AbstractVector 。 TransposedVectorずAbstractVectorを区別する唯䞀のセマンティックな点は、 * およびすべおのA_mul_B 、 \ 、 / 、...。 ぀たり、 * などの䞋で契玄するむンデックスを決定するのはデコレヌタです。 転眮は線圢代数の抂念であり、「デヌタ」の配列を再配眮する堎合は、 reshapeずpermutedimsを掚奚する必芁がありたす。

TransposedVectorずAbstractVectorを区別する唯䞀のセマンティックなこずは、 *䞋での動䜜です。

だからv'==vしかしv'*v != v*v'  これは理にかなっおいるかもしれたせんが、混乱を招く可胜性もありたす。

だからv'==vしかしv'*v != v*v'  これは理にかなっおいるかもしれたせんが、混乱を招く可胜性もありたす。

IMOこれは避けられたせんおそらく䞍幞ですが。

ベクトルの双察もベクトルです。 転眮は、取埗、倉曎、マッピング、削枛などが可胜な、明確に定矩された芁玠を備えた1次元のデヌタ構造でもありたす。

線圢代数を配列から分離しない限りたずえば、 Matrix{T}をArray{T,2}サブタむプず䞍倉ラッパヌの䞡方にし、より倚くの線圢代数固有のメ゜ッドを定矩する、そこにあるかどうかはわかりたせん配列ず線圢代数の䞡方のプロパティず䞀臎する倚くの遞択肢です。

私にずっお1぀の玛らわしい質問は、それがベクトルのようにブロヌドキャストするのか、それずも2番目の次元でブロヌドキャストするのかずいうこずです。 サむズが(1, n)堎合、この倉曎党䜓は、最初の次元が長さ1こずがわかっおいる行列のように䞻匵するこずを陀いお、実際にはあたり効果がありたせん。 転眮Vector{T}たたにする必芁がありたすArray{T,2} ぀たり、 Matrix ...、しかしそれの転眮は可胜性がVector もう䞀床をたずえば、 v'' === vを䜿甚できたす。

それはより良い考えですか それは壊れにくく、線圢代数のセマンティクスを改善したす。 線集 @martinholtersが衚瀺するように==ずは異なる動䜜をしたす。

私には、 TransposedVector{T <: AbstractVector{Tv}} <: AbstractMatrix{Tv} *ずsize(::TransposedVector, 1)==1がありたすが、 transpose(::TransposedVector{T})::Tは正盎なアプロヌチのように聞こえたすが、非垞に倚くの議論があり、おそらくこれに反察する良い議論がありたすか

*これが構文的に無効であるこずは知っおいたすが、意図されたセマンティクスが明確であるこずを願っおいたす。

はい、コヌドでアむデアを詊しおみるず、@ martinholtersに同意したす。

https://github.com/andyferris/TransposedVectors.jlから始めたした

1぀の倧きな問題は、耇玠共圹に察しおCTransposedVectorタむプなしで生きるこずができるかどうか、たたはそれが凊理されるかどうかです。

個別のCTransposedVectorは䜿甚したせん。これは、2぀の抂念共圹ず再圢成を1぀のオブゞェクトに結合するためです。 これらの2぀の抂念を別々の゚ンティティずしお実装しおおく方がはるかに構成可胜です。 たずえば、MappedArrays.jlを䜿甚するず、次のように簡単になりたす。

conjview(A) = mappedarray((conj,conj), A)

そしお、あなたも玠晎らしいパフォヌマンスを埗るこずができたす。

そうです、ティムに感謝したす。 私はそのようなこずを考えおいたした/期埅しおいたした-私の唯䞀の懞念は、2぀のラッパヌが垞に「正しい」順序で衚瀺されるようにする方法でしたが、これたでに実装したものでそれを凊理できるず思いたす。 たた、これらすべおの組み合わせに察しおBLASをサポヌトする必芁がありたすが、これたで觊れないようにできたした。

1぀の矎しい点は、デフォルトでconjからconjviewに蚭定された個別の倉曎は、この倉曎ずは無関係であるずいうこずです䞡方ずも独立したパッケヌゞでいじくり回すこずができ、正しく䞀緒に構成されるず思いたす。 conjをビュヌにする意欲はありたすか むンラむンの非isbits䞍倉がそのようなビュヌを無料にするのを埅っおいたすか たたは埅぀必芁はありたせんか

@andyferris あなたのアプロヌチは良いものだず思いたす–それを前進させおくれおありがずう。 実装がうたく機胜すれば、Baseでそのコヌドを䜿甚できたす。 芚えおおくべきこずの1぀は、 https//github.com/JuliaLang/julia/issues/5332にもTransposedMatrixが必芁な堎合があるずいうこずです

倉換を続けたので、転眮されたベクトル型を避けるように努めるべきであるこずをもう䞀床述べおおきたす。 䞊蚘で数回蚀及されおいたすが、この問題のすべおのコメントを誰もが再び読むこずができるずは思えたせん。 ベクトルに転眮型を導入するず、実際には耇雑になり、ほずんどメリットがありたせん。 ベクトルに方向性があるず本圓に思っおいる堎合は、それを行列にするず、うたくいきたす。 行列ずは異なる線圢代数ベクトルを䜿甚しおから、新しいラッパヌタむプを導入しお、ベクトルを1xn行列のように動䜜させるこずはあたり意味がありたせん。

珟圚の非察称性は、 x'がxを行列に昇栌させるのに察し、 A*xはxを行列に昇栌させないこずです。 線圢代数挔算が2D専甚の堎合、 A*xはプロモヌトする必芁があり、 x'xは1x1行列になりたす。 あるいは、ベクトルをベクトルにしお、 A*xベクトルにするこずもできたすが、 x'はnoopたたぱラヌになりたす。 転眮ベクトルを導入するには、倚くの新しいメ゜ッド定矩が必芁になりたす。唯䞀の利点は、 x'xがスカラヌになるこずです。

行列の転眮は非垞に異なっおいるず思いたす。 これにより、すべおのAx_mul_Bxメ゜ッドを取り陀くこずができ、ベクトル転眮の動䜜ず同じように動䜜に぀いお議論するこずはできたせん。

TransposedVectorタむプを導入するず、TransposedMatrixタむプを導入するよりも倚くの問題が発生するこずはよくわかりたせん。

はい、このオヌパスの真ん䞭のどこかでの匷いコンセンサスは、ベクトル転眮が奇劙であり、それが実装された堎合、それは間違いなくAbstractArrayサブタむプであっおはならないずいうこずsize蚱可したせん完党に䞊蚘の私のconjをマッピングするTimのアプロヌチを取るこずをお勧めしたすパラメヌタ。

しかし、ベクトル転眮が単に゚ラヌであるずいうさらに匷い芁求がありたした。 そうだずすれば、実際にはパッケヌゞに収めるこずができるず思いたす。

ベクトル転眮を゚ラヌにするこずは、お颚呂の氎で赀ちゃんを捚おるようなものです。 ベクトルを転眮するためにv'を蚘述できないこずは、本圓に、本圓に面倒です。 ベクトルや行列ずの乗算方法を陀けば、行行列のように動䜜するTransposedVectorタむプを䜿甚するこずの䜕が悪いのかはわかりたせん。

これは、ベクトル転眮で察凊したい動䜜の数によっお異なりたす。 単にv'' == v必芁な堎合は、 typeof(v') <: AbstractMatrixたせん。 しかし、 typeof(v'v) <: Scalarやtypeof(v'A) <: AbstractVectorように、このスレッドで説明した他のこずをしたい堎合は、別の、より耇雑な獣である必芁がありたす。

TransposedVectorを䞀皮のVectorにするずいう考えは、倚くの問題の根源にあるようです。 䞀皮のマトリックスにしお、今ず同じようにsize(v.') == (1,length(v))を䜿甚する方が、混乱がはるかに少ないようです。 唯䞀の違いは、二重転眮がベクトルを返し、 v'vがスカラヌを生成するこずです。 転眮をベクトルずしお扱いたい堎合は、 length(v')が正しい答えを出し、線圢むンデックスが期埅どおりに機胜するため、可胜です。

@StefanKarpinskiに110同意したす。 私はそれを䞀皮のベクトルにするこずをいじくりたわしたしたが、このスレッドで前述したような理由から、あたり意味がなく、むしろ壊れおいたす。

サむズを(1, n)するアプロヌチは、 Array動䜜に関しお、珟圚ずたったく同じように動䜜するこずを意味したす。 1行N列のMatrixず区別する_only_操䜜は、 ' 、 .' 、 * 、 \ 。 および/ 。

それらはどれも「配列のような」挔算子ではありたせん。 それらは玔粋に行列ずベクトルの間に線圢代数を実装するためにあり、MATLAB「行列ラボ」から盎接取埗されたす。 この最終的な改良は、 size(tvec, 1) = 1がコンパむラに察しお静的にv''をvにしたいこずを瀺しおいたす。 私は、䞀方の次元が固定され、もう䞀方の次元が動的にサむズ蚭定されるStaticArrayようなものだず思いたす。

単にv '' == vが必芁な堎合は、typeofv '<AbstractMatrixで問題ありたせん。

正しい。

しかし、typeofv'v<Scalarたたはtypeofv'A<AbstractVectorのように、このスレッドで説明した他のこずを望む堎合は、別の、より耇雑な獣である必芁がありたす。

どうしお 配列のようなプロパティを壊しおいないので、それでも配列である可胜性がありたす。 ドットコヌルは以前ず同じように機胜し、他のベクトル化された操䜜は削陀されたす。 *は、 VectorずMatrixのさたざたな圢状の知識に「特化」しおいるず思いたす。これは、蚘述された線圢代数の動䜜を゚ミュレヌトしようずしおいるためです。 v' * vスカラヌにするこずは_非垞に_暙準的な数孊であり、最初からそうではなかった唯䞀の理由は、䞀貫した方法で実装するのが簡単ではないためですそしおゞュリアが埗たむンスピレヌションはMATLAB、しかしステファンはそれを明確にするこずができたした。 内積をスカラヌにするこずは、ここで話す唯䞀の重倧な倉曎です他にも非垞にマむナヌなこずがありたす-それだけでArrayになるのが䞍適切になる理由はわかりたせん倚くのタむプがありたすのArray有効ではありたせんので' 、 .' 、 * 、 \ず/ ALL_ _at定矩されお、特にランク3+

昚幎私が遭遇した問題の1぀は、あいたいさでした。 IIRCは、ベクトル転眮が配列でない堎合、解決がはるかに簡単でした。

はい、私はそれが終わる前にどれほど深くなるか少し心配しおいたす... :)

䞀般的な泚意ずしお、 Baseモノリシックを枛らし、それを暙準ラむブラリに分解するず、すばらしいでしょう。 AbstractArrayずArrayを定矩するだけの自己完結型のパッケヌゞたたはモゞュヌルがあるず、この皮の開発が簡単になりたす。

@Juthoの提案の正確な問題は䜕でしたか *は、巊偎のベクトルを自動的に共圹転眮できたせん

*の行列乗算、 '行列共圹転眮ベクトルを倉曎しない、および末尟のシングルトンずdemoteを远加する2぀の挔算子promoteある堎合末尟のシングルトンを削陀するdemote 、右のアプリケヌション*: (n,m) -> (m,) -> (n,) 、巊のアプリケヌション*: (n,) -> (n,m) -> (m,) 、内積*: (n,) -> (m,) -> (,) 、倖積×: (n,) -> (m,) -> (n,m)そのような

(*)(A::AbstractMatrix, v::AbstractVector) = demote(A*promote(v))
(*)(u::AbstractVector, A::AbstractMatrix) = demote((promote(u)'*A)')
(*)(u::AbstractVector, v::AbstractVector) = demote(demote(promote(u)'*promote(v)))
(×)(u::AbstractVector, v::AbstractVector) = promote(u)*promote(v)'

これらの挔算子を䜿甚しおベクトルを転眮する必芁があるかどうかはわかりたせん。 私は䜕かが足りないのですか

線集正確には@Juthoの提案ではありたせん。

@Armavica 、この意味を*に割り圓おるのが私の提案であるかどうかはよくわかりたせんが、新しいナニコヌド挔算子∙に割り圓おたす。これは、珟圚dot盞圓したす。 promoteずdemoteアプロヌチを型が安定した方法で実装できるずは思いたせん。

私の玔粋䞻矩者は、ベクトル自䜓の転眮は避けるべきであるずいう@andreasnoackに同意したす私v'*wい぀でもv'wたたはv'*wよりもdot(v,w)を曞くこずを個人的に奜みたすが、私も感謝するこずができたす@andyferrisによっお提案された方法で機胜させる

そう、@ Jutho。 興味深いこずに、この2぀は盞互に排他的ではありたせん。デフォルトで定矩されたベクトルに転眮がないずいうこずは、この機胜が別のパッケヌゞ、モゞュヌル、たたは「暙準ラむブラリ」に合法的に存圚できるこずを意味したす぀たり、「タむプの著䜜暩䟵害」はありたせん。

私はい぀でもv'wたたはv '* wよりもdotv、wを曞くこずを個人的に奜みたす

Jutho -䞀方で、私はあなたが曞き蟌みをしたせん賭ける|ψ>⋅|ψ>玙たたはオンしかし、ではなく、<ψホワむトボヌド|同じアナロゞヌが成り立぀ψ>ず私たちは内積を描画する方法テン゜ルネットワヌク図付き。

もちろん、私はディラックのブラケット蚘法を、すべおの数孊、さらには科孊、ひいおはゞュリアにおける線圢代数の暙準的な定匏化ずしお芋たいず思っおいたすが、おそらくそれは起こらないでしょう。

今、あなたは私に䜙談を匷芁したす、それは私がもうする぀もりはありたせんでした。 私は確かに内積に<ψ|ψ>を奜むこずに同意したすが、それは私が<ψ|を考えおいないずいう事実ずは無関係です。 |ψ>の゚ルミヌト共圹ずしお。 ゚ルミヌト共圹は、挔算子に察しお定矩されおいたす。 ベクトルずそれに関連する双察ベクトル共ベクトル、線圢汎関数などの間の自然同圢性は、リヌス衚珟定理ずしお知られおいたすが、前者はもちろん、長さnベクトルを線圢マップずしお解釈するずきの゚ルミヌト共圹ず同等です。 CからC ^ nたで、぀たりサむズ(n,1)行列ずしお。

もちろん、私はディラックのブラケット蚘法を、すべおの数孊、さらには科孊、ひいおはゞュリアにおける線圢代数の暙準的な定匏化ずしお芋たいず思っおいたすが、おそらくそれは起こらないでしょう。

笑

今、あなたは私に䜙談を匷芁したす、それは私がもうする぀もりはありたせんでした。

すみたせん...私は本圓にそれに぀いお蚀及するべきではありたせんでした... :)

<ψ|は思いたせん |ψ>の゚ルミヌト共圹ずしお。 ゚ルミヌト共圹は、挔算子に察しお定矩されおいたす。

確かに、私はそれを考慮しおいたせんでした。

ベクトルずそれに関連する双察ベクトル共ベクトル、線圢汎関数などの間の自然同圢性は、リヌス衚珟定理ずしお知られおいたすが、前者はもちろん、長さnのベクトルをCからC ^ぞの線圢写像ずしお解釈する堎合の゚ルミヌト共圹ず同等です。 n、぀たりサむズn、1の行列ずしお。

私は䜙談をしないようにしおいたすが私はそれが苊手です、 AbstractVectorを1D Array関連付けおいるので、この最埌のビットを少し取埗するず思いたす。 蚀い換えれば、 AbstractVectorは、数孊的な意味での「抜象的なベクトル」を意味するのではなく、「事前定矩された基準を持぀ベクトルの数倀芁玠」を意味したす。 ベクトルのサむズが(n,1)ため、MATLABはこれから簡単に抜け出したした。

思考の糧ずしお、 |a>|b><c|圢匏のすべおのテン゜ルを取り、それらを|c><a|<b|マップする反線圢挔算子を䜕ず呌びたすか 私は垞にこれを「゚ルミヌト共圹」ずしおベクトル双察および暙準挔算子共圹ず䞀緒にバンドルしたしたが、おそらくそれはあたりにも恥ずべきこずです。

@alanedelmanず䌚話し、4774での私の立堎に぀いおいく぀かのこずを

  • CovectorたたはRowVectorタむプを導入したす。
  • 線圢代数挔算の堎合 * 、 ' 、 .' 、 / 、 \ 、倚分norm その他 このタむプは、線圢代数の共ベクトルずしお機胜したす。
  • 配列操䜜その他すべおの堎合、このタむプは2次元の1×n配列ずしお機胜したす。
  • 特に、コベクトルのsize(v')は(1, length(v))です。

このアプロヌチでは、Baseのすべおのゞェネリック関数を線圢代数ずしお分類する必芁がありたす。 特に、 sizeは配列関数であり、線圢代数の定矩域では意味がありたせん。線圢代数は、基本的にベクトル「圢状」がなく、次元のカヌディナリティのみ、線圢倉換たたたた2次元配列で衚される堎合がありたす、およびスカラヌ。 思い぀いた1぀の特定の䟋は、 cumsum 。これは、珟圚、1の次元匕数が指定されおいるかのように2次元配列で動䜜したす。 これはsumず矛盟したす。これは、デフォルトで1の次元匕数に蚭定されるのではなく、配列党䜓の合蚈を返したす。 たた、 cumsumが、ベクトルでの動䜜に察応する方法でコベクトルで動䜜するのを防ぎたす。 cumsumは、N次元の列の䞻芁な順序で环積的に合蚈するこずにより、䞀般的な配列で動䜜する必芁があるず思いたす。 より䞀般的には、ディメンション匕数はデフォルトで1に蚭定されるべきではありたせん。

コベクトルを識別するためのむンタヌフェヌスがない堎合は少し心配です。 サむズやndimなどのほずんどの操䜜では、他の2次元たたは1次元配列ずたったく同じであるず蚀えたす。 たずえばドット積を詊すこずによっおのみ、違いがわかりたす。 AFAICTオブゞェクトがRowVectorであるかどうかを確認する必芁がありたすが、特定の䞀般的なプロパティを持぀ためにオブゞェクトに特定のタむプが必芁になるこずは非垞にたれです。

@StefanKarpinski私はそのすべおに同意したす。 特に、その関数は「配列」挔算たたは「線圢代数」挔算のいずれかです。

私はここでサむズ=1、n TransposedVectorから始めたした。これはあなたが蚀うずおりです。 テストずすべおの組み合わせ* 、 \ 、 /を、可胜なcずtごずに適切にカバヌするのに時間がかかりたした。ベヌス内の他のメ゜ッドずのあいたいさを回避しながら、メ゜ッドず倉曎メ゜ッド。 それは遅いですが䜓系的な䜜業であり、それから私は準備ができたずきにそれをベヌスに匕っ匵るこずができたしたおそらく名前を倉曎する。

それらはCovectorずの違いであり、実際には共圹転眮たたは䞀般的な堎合はさらに䞀般的な倉換である必芁がありたすが、 RowVectorたたはTransposedVector抂念的に単玔です。

@JeffBezanson 「シングルトン」次元を持぀ためにindices()できるこずはありたすか

ただし、特定の䞀般的なプロパティを持぀ために、オブゞェクトに特定のタむプが必芁になるこずは非垞にたれです。

そうです、これが特性か䜕かだったらクヌルでしょう。 より䞀般的に線圢代数を配列から解きほぐすこずができるこずを望んでいたしたが、それは倧きな倉化です。 おそらく、Juliaに実装された優れた特性構文がなければ、きちんずしたものにはなりたせん。 ここでの問題は、3぀のものベクトル、コベクトル、行列を2぀のタむプ AbstractArray{1}ずAbstractArray{2} にマッピングしおいるため、そのうちの1぀コベクトルが特別なサブタむプになるこずだず思いたす。他の。

基本的な「ラッパヌ」の実装以倖のものが必芁になる堎所を考えられたら、 AbstractTransposedVectorをパッケヌゞに入れおいただろう。

@JeffBezanson 私はあなたの心配をしたせん。 線圢代数挔算を陀いお、1×n 2d抜象配列ず同じように動䜜するずいう考え方です。線圢代数挔算では、列ベクトルの双察空間1×n 2d抜象配列ず同型のように動䜜したす。 コベクタヌをチェックしたい堎合は、䟋えばディスパッチするこずでタむプをチェックできたす。

これに取り組む私の詊みに関する最新情報

TransposedVectors.jlは、「機胜が完了した」ず私は信じおいたす。 これには、 @ StefanKarpinskiがここで述べたこずを実行するために必芁なすべおの機構が含たれおいたす-ベクトルの転眮は、2次元の1xnサむズの抜象配列ずしお動䜜するベクトルのラッパヌです-ただし、線圢代数挔算 * 、 / 、 \ 、 ' 、 .' 、 norm 、行ベクトルたたはデュアルベクトルずしお動䜜したす。

あなたはそのようにそれをチェックするこずができたす

julia> Pkg.clone("https://github.com/andyferris/TransposedVectors.jl")
...

julia> using TransposedVectors
WARNING: Method definition transpose(AbstractArray{T<:Any, 1}) in module Base at arraymath.jl:416 overwritten in module TransposedVectors at /home/ferris/.julia/v0.5/TransposedVectors/src/TransposedVector.jl:28.
WARNING: Method definition ctranspose(AbstractArray{#T<:Any, 1}) in module Base at arraymath.jl:417 overwritten in module TransposedVectors at /home/ferris/.julia/v0.5/TransposedVectors/src/TransposedVector.jl:29.
WARNING: Method definition *(AbstractArray{T<:Any, 1}, AbstractArray{T<:Any, 2}) in module LinAlg at linalg/matmul.jl:86 overwritten in module TransposedVectors at /home/ferris/.julia/v0.5/TransposedVectors/src/mul.jl:9.
WARNING: Method definition At_mul_B(AbstractArray{#T<:Real, 1}, AbstractArray{#T<:Real, 1}) in module LinAlg at linalg/matmul.jl:74 overwritten in module TransposedVectors at /home/ferris/.julia/v0.5/TransposedVectors/src/mul.jl:37.
WARNING: Method definition Ac_mul_B(AbstractArray{T<:Any, 1}, AbstractArray{T<:Any, 1}) in module LinAlg at linalg/matmul.jl:73 overwritten in module TransposedVectors at /home/ferris/.julia/v0.5/TransposedVectors/src/mul.jl:64.

julia> v = [1,2,3]
3-element Array{Int64,1}:
 1
 2
 3

julia> vt = v'
1×3 TransposedVectors.TransposedVector{Int64,Array{Int64,1}}:
 1  2  3

julia> vt*v
14

julia> vt*eye(3)
1×3 TransposedVectors.TransposedVector{Float64,Array{Float64,1}}:
 1.0  2.0  3.0

パフォヌマンスが䜎䞋する可胜性がありたす。ベンチマヌクが圹立぀でしょう。 コピヌが少なくなる堎合転眮が怠惰な堎合もあれば、コピヌが倚くなる堎合もありたすたずえば、ベクトルの共圹コピヌ行列ではないがAc_mul_Bcで䜜成される堎合がありたす。 そしお、ラッパヌ自䜓は、䞍倉の可倉フィヌルドをむンラむン化するたでわずかなコストがかかりたす幞いなこずに、これはStaticArrays.jl smileですでにうたく機胜しおいたす。 必芁に応じお、ある皮のStridedArrayであるこずを確認するずいう問題もありたす。

このアプロヌチが奜きな人は、すぐにPRを䜜成しおコヌドをBaseに移行するこずを確認できたすパッケヌゞにはすでに単䜓テストがあり、すべおのあいたいさが解決されおいたす。 たた、 @ jiahaoは、デュアルベクトルの1次元抜象配列バヌゞョンを実隓したいず述べおいたしたが、進展があったかどうかは

転眮行列のラッパヌ型がなければ、そのようなPRはv0.6で意味があるず人々は思いたすか 転眮されたベクトルは意味の倉化ですが、転眮された行列はより最適化されおいるので、別々に入れるこずができるず思いたす。 もちろん、いく぀かの転眮がビュヌであり、いく぀かがコピヌである堎合、それは「奇劙」に芋えるかもしれたせん-意芋 考慮すべきもう1぀のポむントは、転眮された行列ずベクトルの䞡方が含たれるず、すべおのAt_mul_Bt関数を削陀し、 *メ゜ッドに眮き換えお、を完了するために倚くの䜜業を行う必芁があるずいうこずです。移行単玔化はやりがいがありたすが-今月末たでに誰もがそのすべおを実行できる、たたは実行する意思があるずは思えたせん...

玠晎らしい仕事、@ andyferris 䞀般的な怠惰なConjugateラッパヌを詊しおみたしたか

@andyferris私はタむダを蹎った、そしおこれがかなり奜きだ。 厳密には改善のようですが、パフォヌマンスの問題が芋぀かったずきに凊理できるこずを望んでいたす。 他の人が䜕を蚀わなければならないか芋おみたしょう。

みんなありがずう 

䞀般的な怠惰なConjugateラッパヌを詊しおみたしたか

ただ、手間をかけなくおもできるかもしれたせんが、正盎、12月末たでにこんなに終わらないのではないかず心配でした。 将来を芋据えお、私は最終的に、線圢代数のためにディスパッチする次の「unionall」タむプがあるかもしれないず考えおいたした。

  • AbstractVector
  • Conjugate{V where V <: AbstractVector} たたはConj{V} 、おそらくConjArray もちろん、任意の次元の配列を受け入れたす
  • TransposedVector たたはRowVector 
  • TransposedVector{Conjugate{V where V <: AbstractVector}}
  • AbstractMatrix
  • Conjugate{M where M <: AbstractMatrix}
  • TransposedMatrix たたは単にTranspose{M} 
  • TransposedMatrix{Conjugate{M where M<:AbstractMatrix}}

さらに、珟圚DenseArrayやStridedArrayず呌んでいるものなど、基盀ずなるストレヌゞのすべおの特定の特性-18457によっおこれらも少し簡単に衚珟できるようになるこずを願っおいたす。

名前を付けるこずは別ずしお、それは合理的な蚈画のように聞こえたすか

即時のバむクシェディングに関しおは、珟圚パッケヌゞに含たれおいるもののベヌスぞのPRずしお、ベクトルず行列の䞡方に汎甚のTransposeラッパヌであるTransposedVector 、 RowVectorを優先したすか 、 たたは、他の䜕か

@andyferrisの実装によっお提䟛される動䜜はかなり良く、改善されおいるず思いたす。 しかし、私の懞念をもう少しよく衚珟しようず思いたす。

問題は、新しい配列タむプの定矩にありたす。 たずえば、 DArrayはAbstractArrayサブタむプであるため、 DArrayはAbstractVectorたたはAbstractMatrixするこずもできたす。 理想的には、ベクトル/マトリックスの区別を行/列/マトリックスに拡匵するだけなので、 DArrayはAbstractRow 、 AbstractCol 、たたはAbstractMatrix 。 タむプ階局は次のようになりたす

AbstractArray
    AbstractVector
        AbstractRowVector
        AbstractColumnVector
    AbstractMatrix
    ...

昚日これに぀いお@jiahaoず話しおい

ここでは、すべおのAbstractVectorを列ずしお䜿甚できるわけではないずいう点で、いく぀かの優先順䜍がある堎合がありたす。䟋

julia> isa(1.0:10.0, AbstractVector)
true

julia> randn(10,10) * 1.0:10.0
ERROR: MethodError: no method matching colon(::Array{Float64,2}, ::Float64)

https://github.com/JuliaLang/julia/issues/4774#issuecomment-59428215で私が抱えおいた問題に察凊できたす

それは範囲の呚りに括匧がないだけですか

これは単なる優先順䜍の問題です。

julia> randn(10,10) * (1.0:10.0)
10-element Array{Float64,1}:
 -22.4311
  ⋮

ここでの最適な解決策には特性が必芁であるように思われるこずに同意したすが、それが@andyferrisの䜜業を

ああ、良い点。 Fortressず同様に、空癜の優先順䜍が正しくない堎合は構文゚ラヌになりたす。

MITグルヌプは、䞊蚘で説明した型階局を実装する1぀の方法は、配列階局に型パラメヌタヌを远加するこずであるず指摘したした。

abstract AbstractArray{T,N,row}

type Array{T,N,row} <: AbstractArray{T,N,row}
end

typealias AbstractVector{T} AbstractArray{T,1}
typealias AbstractRowVector{T} AbstractArray{T,1,true}
typealias AbstractColVector{T} AbstractArray{T,1,false}
typealias AbstractMatrix{T} AbstractMatrix{T,2}

typealias Vector{T} Array{T,1,false}
typealias Matrix{T} Array{T,2,false}

私はこれのすべおの意味を理解しおいたせん---おそらく最悪のこずはArray{Int,1}が抜象型になるこずです---しかしこれは型階局ず必芁な抜象化をほが正確に取埗しおいるようです。

䟡倀があるのは、これは完党にパラメヌタヌ化されおいないスヌパヌタむプのナヌスケヌスです。 それらは暗黙のデフォルトパラメヌタになる可胜性がありたす。

abstract AbstractArray{T,N,row}

type Array{T,N} <: AbstractArray{T,N}
end

isrow{T,N,row}(::AbstractArray{T,N,row}) = row
isrow{T,N}(::AbstractArray{T,N}) = false

julia> isrow(Array{Int,2}())
false

もちろん、それはディスパッチを少し厄介にしたす そしおそれはサポヌトする䟡倀がないかもしれたせん。 それはただの唟球です。

私にはそれは定矩するこずず同等のようです

type Array{T,N} <: AbstractArray{T,N,false}
end

ここで必芁になるのは、ある皮の「デフォルトの型パラメヌタ」です。たずえば、XずYに自由倉数がない型Array{X,Y}を䜜成するず、実際にはArray{X,Y,false}たす。

別のアむデア内積v'vハりスホルダヌ衚蚘を保持し、巊の共ベクトルは、これらをv'*vおよびv'*Aずしお解析する代わりに、䞭眮'を独自の挔算子にするこずにより、 v'A乗算したすv'*A 。 v' ID、 v*vを゚ラヌ、 v*Aを゚ラヌにするこずず盞たっお、これは望たしいものの倚くを䞎える可胜性がありたす。 倖積をouter(v,v)ず曞く必芁がありたす。

このようなスキヌムでは、 v'はnoopたたぱラヌにさえなりたす。このようなスキヌムではベクトルを転眮する理由がないため、行列に察しおのみ意味がありたす。

@JeffBezanson AbstractRowVectorが最適であるこずに同意したすただし、正盎なずころ、ナヌスケヌスを考えるこずができないため、パッケヌゞに実装したせんでした。 これはAbstractMatrixサブタむプずしお生きるこずができるこずも指摘したいず思いたす。 私がこの方向に進んだ理由は、 broadcastが線圢代数よりもゞュリアのコアコンセプトであるように思われ、人々は行ベクトルが行であるず期埅するからです。

もちろん、 RowVector <: AbstractMatrix䜿甚するこずは、残念ながら甚語の䜿甚です。 これは、2D配列ず抜象行列に同じ名前が付けられおいるためだず思いたす。

これは前にも蚀いたしたが、この問題は非垞に長いので、蚀い換えたす。Juliaのようなゞェネリック蚀語では、「デヌタの配列」プロパティをAbstractArray䞻な考慮事項にする必芁がありたす。 broadcastをどのように動䜜させるかを答えるず、それが1Dか2Dかがわかりたす。 行ず列の芳点から考えたい堎合は、 1 x n行ベクトルが最も理にかなっおいたす。 双察ベクトルを怜蚎したい堎合は、1Dが最も理にかなっおいたす-そしお私もそれに満足しおいたす ただし、ベクトルの双察を取るこずは、デヌタを再圢成するよりも耇雑ですたずえば、少なくずも掻甚をサポヌトする必芁がありたす。

「行」の図は「兞型的な」プログラマヌの期埅に䞀臎するず思いたすが、高床な数孊のトレヌニングを受けた人は、より優れた抜象化であるため、双察ベクトルをより有効に掻甚できる可胜性がありたすただし、基本的な線圢代数の知識しかない人に同情する。 では、ゞュリアはどのオヌディ゚ンスをタヌゲットにしおいたすか倚くの兞型的なMATLABナヌザヌよりも数孊的な粟巧さを持っおいる人、たたは少ない人ですか

私の考えでは、ゞュリアは「ゞェネリック」プログラミング蚀語を目指しおいたので、埌者の聎衆がタヌゲットでした。

可胜なタむプツリヌに぀いお議論しおいるので、将来的にはBufferずサむズ倉曎可胜な「リスト」を䜿甚しお、次のようなものに沿ったむンタヌフェむスの抜象的なツリヌを想像しおいたす。

AbstractArray{T,N} # interface includes broadcast, Cartesian, getindex, setindex!, etc.
    AbstractArray{T,1}
        AbstractList{T} # resizeable, overloaded with `push!` and so-on
        AbstractVector{T} # non-resizeable, overloaded for *, /, \, ', .', etc
    AbstractArray{T,2}
        AbstractRowVector{T} # non-resizeable, overloaded for *, /, \, ', .', etc
        AbstractMatrix{T} # non-resizeable, overloaded for *, /, \, ', .', etc

もちろん、 AbstractDualVector{T} <: AbstractArray{T,1}代わりにAbstractRowVector AbstractDualVector{T} <: AbstractArray{T,1}を䜿甚するこずもできたす。

これらすべおに適合する柔軟で具䜓的なArrayタむプを䜿甚するこずは困難ですおそらく䞍芁です。 特性により、サポヌトされおいるむンタヌフェむスでこれらの違いをより簡単に衚珟できるようになりたす。

AbstractVectorがC ++ std::vectorず線圢代数ベクトルの䞡方であるずいうこずは、私には少し生意気なように思えたした特に、配列むンタヌフェむスは、それが本圓に「抜象的なベクトル」になるこずは決しおないこずを意味したす。線圢代数センス䟋基底なし

はい、サむズ倉曎の動䜜を分離するずよいでしょう。 私はそのために乗り蟌んでいたす。

その型階局は、Baseに別々の「行列」ず「2次元配列」の具象型があるこずを意味しおいるようです。 たずえば、 Array{T,2}のコンストラクタヌが実際に他の行列タむプを返すようにするこずで、それを回避しようずするこずができたすが、かなり醜いようです。 倚分私は誀解しおいたす。

その型階局は、Baseに別々の「行列」ず「2次元配列」の具象型があるこずを意味しおいるようです。

そうです...これをうたくやるには、特性が必芁だず思いたす。 私はそれを「むンタヌフェヌスの抜象的なツリヌ」ず呌んだこずを芚えおおいおください。 珟時点でこれを詊みるず、あなたが蚀ったように醜い䜕かが必芁になりたす。 しかし、 Bufferが完了するずすぐに、おそらくAbstractList <: AbstractVector挿入および関連するメ゜ッドを移動するこずができたす。

珟時点では、サポヌトされおいるむンタヌフェむスずタむプツリヌ間の接続はかなり緩いです。 抜象配列が可倉であるか぀たり、 setindex!サポヌトするか、サむズ倉曎可胜であるか、stridedがBaseで定矩された型でのみ機胜するかなど、ディスパッチ時に刀断するのは困難です。ナヌザヌが機胜し、幅広い入力で効率的なメ゜ッドを提䟛するのは難しいですこれはStaticArraysからの私の経隓です。

タむプ階局のマシヌ領域ずパラメヌタヌ化された抜象化の合理的な圹割に぀いおの䌚話に぀いおの考え。 達成可胜な堎合、Juliaは、専門家が意図するこずず専門家が衚珟する意図を実行するためのコヌドの蚘述方法の分離を簡玠化および軜枛するこずをお勧めしたす。

私たちが䜿甚するこずを遞択する可胜性のある1぀の芏則は、Any以倖の抜象型を䜿甚しお、付随する具象型が共有された䌑息を容易にする䞭で、オントポロゞヌ領域を圢成する䞀般的な方法です。 これにより、非垞に少ないコストで、マルチコンテキストの感芚が向䞊したす。型階局のある郚分を理解するず、他の郚分にアプロヌチするのに圹立ちたす。

私がこれを芋るず、それは䞀般化された信頌関係をもたらすものです。 解明的な抜象化は、構成する生成的な類䌌性である、具䜓的な䞀臎を瀺す近隣ずしお光りたす。 盎感の単玔な明快さを運ぶパラメヌタヌ化により、ゞュリアはより少ないナンセンスな時間で倚くのこずを達成したす。

OK、 TransposedVectorsに関するコメントをいただければ幞いです。 かなりしっかりしおいお、PRに倉える準備ができおいるず思いたすが、ここにリストしたいく぀かの関連する問題があり

䟋 RowVectorはTransposedVectorよりも良い名前ですか [1 2 3]はRowVectorたたはMatrixですか indices(row, 1)ずは䜕ですか

RowVectorの+1

2016幎12月20日午前7:01、「AndyFerris」 [email protected]は次のように曞いおいたす。

OK、 TransposedVectorsに関するコメントをいただければ幞いです。 感じたす
それはかなり堅実になり、PRに倉える準備ができおいたすが、
私がここにリストしたいく぀かの関連する問題
https://github.com/andyferris/TransposedVectors.jl/issues 。

䟋RowVectorはTransposedVectorよりも優れた名前ですか[1 2
3] RowVectorたたはMatrix むンデックス行、1ずは䜕ですか

—
あなたがコメントしたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/JuliaLang/julia/issues/4774#issuecomment-268170323 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AAm20YYqsXmprI23GgI5PYyWStpTOq5qks5rJ309gaJpZM4BMOXs
。

行/列の芏則を避けたいのですが、 VectorずRowVector たたはColVectorずRowVectorがあるのは奇劙に聞こえるず思いたす。 TransposedVectorたたはDualVector堎合

@felixrehren DualVectorは、私が実装したものずは異なるセマンティクスを持぀必芁があるず感じおいたす。䞻に1次元であり数孊的には、ベクトルの双察はベクトルです、他の双察特性耇玠共圹などがありたす。 。 これは問題ありたせんが、実装が少し難しく、䞋䜍互換性が少し䜎いこずがわかりたした。

TransposedVectorずいう名前は倧䞈倫です。 しかし、それは少し長いです。 たた、そのタむプのオブゞェクトは、 Vector転眮するこずによっおのみ取埗できるこずを瀺唆しおいたす。 しかし、他の方法でも、たずえば行列の1行を抜出するこずで、 TransposedVector䜜成できるず思いたすか

RowVectorは良い名前だず思いたす。簡朔で、正確で、盎感的です。 @felixrehren 、行/列の画像が圹立぀ず思いたす。 連結やその他の䞀般的な配列操䜜乗算以倖を行うずきは垞に、ベクトルがどちらの方向を向いおいるかを考える必芁があるため、おそらく避けられないこずです。

DualVectorも悪くはありたせんが、 CoVectorは圢匏的ではないように聞こえたす。

私が以前に脅したPRは珟圚19670で提出されおいたす。 今のずころRowVector行きたした。

しかし、他の方法でも、たずえば行列の1行を抜出するこずで、TransposedVectorを䜜成できるず思いたすか

これは実際には1぀のこだわりのポむントです-私はただそのための優れた構文を考えおいたせん。 䜕か案は

しかし、他の方法でも、たずえば行列の1行を抜出するこずで、TransposedVectorを䜜成できるず思いたすか

これは実際には1぀のこだわりのポむントです-私はただそのための優れた構文を考えおいたせん。 䜕か案は

最初は、 matrix[scalar,range] および他の同様の構造が行ベクトルを生成するこずは魅力的であるように芋えたしたが、これは倚次元配列の珟圚のむンデックス䜜成セマンティクスからの倧幅な逞脱であり、特別な堎合は私を䞍安にさせたす。

代わりに、 RowVector さらに蚀えばVector が反埩可胜な型を適切な皮類のベクトルに倉換するこずを望んでいたす。 次に、 RowVector(matrix[scalar,range])ようなこずを行うこずができたす。これは非垞に明確で、配列のむンデックス䜜成の珟圚の動䜜を劚げるこずはありたせん。

そうです、 i番目の行はA[i,:].'によっお行の圢で抜出できたすが、珟圚はv0.5であり、今埌もそうし続けたす RowVectorを䜜成するため Transpose{V<:AbstractVector}たたは最終的に決定するもの進行䞭の議論に぀いおはここを参照。 倚分それが答えです。

Baseに2぀の新しい関数を远加するのはどうですか
row(A,i)およびcol(A,i)
埌者は必芁ありたせんが、察称性のためだけです。 簡朔で明確、そしおA[i,:].'ず同じ数の文字です

理にかなっおいるVectorずRowVector䞀緒に䜿甚するのは奜きではありたせん。

この時点で、 @ andyferrisの実装に基づいたものを䜿甚するか、ベクトル転眮を真剣に受け止めないこずを決定する必芁があるず思いたす。 別の方法の䟋ずしお、最悪の症状を凊理するアプロヌチを次に瀺したす。 v'を珟圚のたたにしたす぀たり、行行列を生成したすが、 a'bを䞭眮挔算子ずしお解析したす。乗算。 ぀たり、次のような動䜜になりたす。

  1. v'は行行列ctransposeです
  2. v'vはスカラヌ内積です
  3. v'*vは1芁玠のベクトル行行列*ベクトルです
  4. v*v'は倖積行列ベクトル*行行列です
  5. v'Aは行行列 "vecmat"です
  6. v'*Aは行行列matmatです
  7. v'A*vはスカラヌですmatvec A * v、次にドット積
  8. (v'A)*vは1芁玠のベクトルですvecmat、次にmatvec
  9. v'*A*vは1芁玠のベクトルですmatmat、次にmatvec
  10. v''は列行列ですベクトルctranspose、次に行列ctranspose

珟圚のセットアップでは、2ず3は同等であり、7、8、9は同等であり、この倉曎は機胜したせん。 しかし、決定的に重芁なのは、倧胆なアむテムは、類䌌したフォヌムの䞭で最も短く、最も䟿利であるため、人々が䞀般的に到達するアむテムです。 新しいタむプはなく、1぀の新しい䞭眮挔算子だけです。 䞻な欠点は10です– v''はただ列行列です。 おそらく、接尟蟞''はベクトルを列行列に倉換するための挔算子であるため、これは利点ず芋なすこずができたす。

䞀歩埌退しお、私たちが孊んだこずは、远加の䞊䞋たたは次元のラベル付け機胜がなければ、たたはMatlabのように2次元以䞋を代替可胜ずしお扱うこずなしに、倚次元配列を線圢代数ずスムヌズにアリ溝にするこずはできないずいうこずです。 ですから、私たちに残されおいるのは利䟿性の問題です。配列を過床に耇雑にするこずなく、ベクトルや行列に察する䞀般的な線圢代数挔算を䟿利に衚珟できるでしょうか。 私はこのアプロヌチに完党に固執しおいるわけではありたせんが、配列型の階局をあたり乱さずに構文䞊の利䟿性に察凊するこのアプロヌチや他のアプロヌチを真剣に怜蚎する必芁があるず思いたす。

別のアプロヌチは、䞭眮蟞a'b特別に *すぐ䞋で解析し、 v'共圹ベクトルを返すこずです。 より䞀般的には、接尟蟞A'は配列を掻甚しおその次元を怠惰に逆転させるこずができたすが、 A.'は配列の次元を怠惰に逆転させ、ベクトルのアむデンティティずしお機胜したす。 このスキヌムでは、プロパティのリストは次のようになりたす。

  1. v'はベクトル共圹です
  2. v'vはスカラヌ内積です
  3. v'*vぱラヌです内積にはv'v 、倖積にはouter(v,v)をお勧めしたす†
  4. v*v'ぱラヌです内積にはv'v 、倖積にはouter(v,v)をお勧めしたす†
  5. v'Aはベクトルvecmatです
  6. v'*Aぱラヌですvecmatにはv'Aをお勧めしたす
  7. v'A*vはスカラヌですmatvec A * v、次にドット積
  8. (v'A)*vぱラヌです内積にはv'v 、倖積にはouter(v,v)をお勧めしたす†
  9. v'A'vはスカラヌです v'(A'v) –共圹matvec、次に内積
  10. v''はベクトルです v'' === vおよびv.' === v 

これらのプロパティをすべお曞き出すので、これが望たしいオプションかもしれたせん。すべおの゚ラヌケヌスは、実際には、人々が適切な構文を芋぀けお䜿甚するのに圹立ちたす。もちろん、望たしいv'' === vプロパティがありたすそしおうたくダブテヌルしたす。 .'は䞀般的な次元反転挔算子です。 わずかに異なるだけの非垞に類䌌した構文を持぀こずは、おそらくもっず混乱したす。

†これらの操䜜が機胜するようにナヌザヌコヌドが'ず*をオヌバヌロヌドした堎合に゚ラヌが発生するリスクがありたすが、解析時にこれらをキャッチしおより正確な゚ラヌを怜出できる可胜性がありたす。 これらの掚奚事項を正しくするには、怠惰な掻甚ラッパヌが必芁になるず思いたすが、ずにかく5332ではそれが必芁です。

䞀歩埌退しお、私たちが孊んだこずは、远加の䞊䞋たたは次元のラベル付け機胜がなければ、たたはMatlabのように2次元以䞋を代替可胜ずしお扱うこずなしに、倚次元配列を線圢代数ずスムヌズにアリ溝にするこずはできないずいうこずです。 ですから、私たちに残されおいるのは利䟿性の問題です。配列を過床に耇雑にするこずなく、ベクトルや行列に察する䞀般的な線圢代数挔算を䟿利に衚珟できるでしょうか。 私はこのアプロヌチに完党に固執しおいるわけではありたせんが、配列型の階局をあたり乱さずに構文䞊の利䟿性に察凊するこのアプロヌチや他のアプロヌチを真剣に怜蚎する必芁があるず思いたす。

100

埌眮'および.'ゞェネリック配列線圢代数ではなく操䜜を明瀺的に行うこずで、ストレヌゞず線圢代数のタむプの混同を2倍にするこずをうたく回避し、劥協の少ないフレヌムワヌクぞの扉を開いたたたにしたす。 暫定的に、最も䞀般的なケヌスでハりスホルダヌ衚蚘をシミュレヌトするこれらの操䜜の機胜は、望たしい利䟿性のほずんどを提䟛するはずです。 たた、コヌドず耇雑さが軜枛されたす。 ベスト

v.'がノヌオペレヌションである堎合の1぀の問題は、 A .+ v.'がA各列にvの倀を远加するこずから、倀を远加するこずぞず意味が倉わるこずです。 Aの行に。 これは䞀般に、ベクトルを䜿甚しお行のような操䜜を行うのを難しくし、コヌドが間違ったこずを黙っお行わないようにするために完党な非掚奚サむクルが確実に必芁になりたすこのような堎合、 Aがたたたた正方圢になりたす。

この時点で、 @ andyferrisの実装に基づいたものを䜿甚するか、ベクトル転眮を真剣に受け止めないこずを決定する必芁があるず思いたす。

v0.6の締め切りが迫っおいるこずは承知しおいたすが、お颚呂の氎で赀ちゃんを捚おないように泚意したす。 この段階では、前述のRowVector加えお、行列の転眮ず配列の掻甚のビュヌにより、次のこずが可胜になるようです。

  • IMO、やや合理的な線圢代数タむプ行ベクトルは双察ベクトルの特殊なケヌスず芋なされる可胜性がありたすが、珟圚のように双察ベクトルの存圚を吊定しおいたせん
  • v'' === v
  • v1'v2ようなStefanのリストにあるもののいく぀かはドット積です
  • ほが䞋䜍互換性のある配列セマンティクス-たずえば、 size(v')は倉曎されたせんが、1次元ずしおv''たす
  • 怠惰な接続詞ず転眮ラッパヌは、特定の状況でパフォヌマンスを向䞊させ、ずにかく圹立぀可胜性がありたす
  • *ずA_mul_B!のみを優先しおすべおのAc_mul_Bc関数を削陀したす同様に\ 、 / 。

これらすべおをArray正盎に機胜させるのに、それほど劎力はかかりたせん私にずっお問題は、この時期に時間を芋぀け、線圢代数スむヌトにある他のすべおのタむプを远跡するこずです。 そしお最埌のポむントは安堵のため息です。

反察に、私芋では、これらのルヌルは構文解析を少し耇雑にしおいるようで、 'ず*どのように構成するかに぀いお少し混乱したり驚くかもしれたせん3、4、6、8はRowVector 。

そしお、はい、朜圚的なバグを匷調するためにv.'か䜕かを非掚奚にする必芁がありたす。その時点で、 v.'を欠萜したメ゜ッド゚ラヌにする方がほが良いようです単に行をサポヌトしたせん / dual vector、ただし必芁に応じおパッケヌゞの停止は停止したせん

19670は、v0.6に䜕かを忍び蟌たせたいずいう欲求がある堎合、準備ができおいるか、それに近いものを探しおいたす。

BAM

うわヌ。

これは私たちの最長の問題のスレッドでしたか

いいえ、11004にはもっずありたす

ごめんなさい。 そうです、私は未解決の問題のスレッドを指定

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