Julia: `ones`を廃止したすか

䜜成日 2017幎11月02日  Â·  46コメント  Â·  ゜ヌス: JuliaLang/julia

oneずoneunitを区別したので、 ones(T, sz)は誀った名前のように芋えたす。 fill(oneunit(T), sz)を優先しお非掚奚にしたすか もしそうなら、私たちもzerosを捚おるべきですか

decision linear algebra stdlib

最も参考になるコメント

私には、 fill(oneunit(T), sz)は、 ones(T, sz)ず比范しお、読みやすさの重芁な損倱のように芋えたす。

党おのコメント46件

xref https://github.com/JuliaLang/julia/issues/11557#issuecomment -339776065以䞋、および@ Sacha0のPR24389

私はこの効果のために進行䞭の䜜業を行っおおり、翌日か2日で投皿したいず思っおいたす:)。 䞀番

私には、 fill(oneunit(T), sz)は、 ones(T, sz)ず比范しお、読みやすさの重芁な損倱のように芋えたす。

oneunit(T)代わりに、通垞はリテラルたたは同様にコンパクトなもので十分であるため、 fill(oneunit(T), sz)ように冗長なものを曞く必芁はめったにないこずに泚意しおください。 配列コンストラクタヌの将来の倉曎により、より短い呪文も可胜になる可胜性がありたす。 さらに、 fillに移行するず、それが奜きになりたす:)。 䞀番

私達はちょうどかどうかを遞ぶこずができones䜿甚しおいたすoneたたはoneunit 。 onesずzerosは䟿利な関数ず芋なす必芁がありたす。これは、より䞀般的な関数に関しお明確な意味がある限り問題ありたせん。

トリアヌゞごずの蚈画来週再怜蚎したす。具䜓的には、 onesずzerosをMATLAB互換性レむダヌに移動し、ベヌスでfillを優先するこずを怜蚎したす。 䞀番

onesずoneunitsは、2぀のオプションを区別したす。

これずzerosをMATLAB互換性に移行するこずに぀いお私がどのように感じおいるかわかりたせん。 Mathworksが発明したからずいっお、それが私たちが誇りに思うこずができる優れた䟿利なAPIではないずいう意味ではありたせん。 簡単に蚀えば、この考えの背埌にある理由は䜕でしたか 申し蚳ありたせんが、トリアヌゞははるかに効率的であるように芋えたすが、掚論が䞎えられおいない堎合は倧幅に透明性が䜎くなりたす。

それは私もわくわくするような倉化ではありたせんが、論理的な矛盟があるので私はそれを䞊げたした。 ones(T, sz) fill(one(T), sz)意味するず蚀っおも過蚀ではありたせんが、実際にはfill(oneunit(T), sz)です。

1぀のオプションは、名前をoneunitsに倉曎するこずです。 別の方法は、恐ろしいスワップを行うこずです one -> algebraic_oneおよびoneunit -> one 。 これは壊れおおり、非掚奚を介しお行うこずはできたせん。そのため、私は「恐ろしい」ず蚀いたす。

はい、私は远加するこずだず思いたすoneunitsし、倉曎ones䞎えるためにfill(one(T), ...)がない、そのための明癜な修正でしょうか

私はそれで倧䞈倫だろう。 奜奇心から、 fill(one(T), sz)の甚途は䜕ですか onesも必芁ですか

ハハ:)私は尋ねる぀もりでした-あなたはfill(oneunits(T), sz)を䜕に䜿うのですか たずえば、1メヌトル、1キログラム、たたは1秒で満たされた配列は䜕に䜿甚されたすか

fill(one(T), sz)は、カスタムのreduction-type-of操䜜甚に配列を初期化するzeros(T, sz)ずほが同じ理由で䜿甚されおいるず思いたす。 配列z = zeros(T, sz)は、芁玠をz[i] += x远加する準備ができおいたすが、 o = fill(one(T), sz)は、芁玠をo[i] *= x乗算する準備ができおいたす。 たずえば、配列芁玠が盞察的な確率を衚す可胜性がある状況を考えおいたす。 これらの2぀のケヌスでは、それぞれ+たたは*挔算子のIDを探しおいたす加法ゞェネレヌタヌではありたせん。

23544も参照しおください

ハハ:)私は尋ねる぀もりでした-あなたは䜕のためにfilloneunitsT、szを䜿いたすか たずえば、1メヌトル、1キログラム、たたは1秒で満たされた配列は䜕に䜿甚されたすか

ODEの埓属倉数。 T型の配列を芁求したずきに、ナニットがランダムに切り刻たれただけだずしたら、それは奇劙なこずです。

fillを奜む基本的な理由は、匷力で盎亀する構成可胜なツヌルのタむトなセットが、 ones / zerosなどのアドホックで制限された重耇するツヌルの倧芏暡なコレクションよりも優れおいるためです。 trues / falses 。 䞊蚘の説明は、この点を匷調しおいたす。 fill䞊蚘のすべおのナヌスケヌスに明確か぀ほずんどの実際の䜿甚では簡朔に察応したすが、 ones / zeros / trues / falsesアプロヌチでは、ナヌスケヌスごずに新しい関数が必芁です。

ベヌスの曞き換えからのいく぀かの関連する䟋

complex.(ones(size(Ac, 1)), ones(size(Ac, 1)))

になりたす

fill(1.0 + 1.0im, size(Ac, 1))

ず

2ones(Int, 2, 2, 2)

になりたす

fill(2, (2, 2, 2)) # or fill(2, 2, 2, 2) if you prefer

これらのfill呪文は、 fill以倖の呪文よりも単玔で、読みやすく、コンパクトで、効率的であり、 base/ずtest/はこのような䟋がたくさんありたす。 すべおの倉曎ず同様に、 fillに移行するには、初期の粟神的な調敎が必芁です。 しかし、調敎埌は、指先でより倚くのパワヌず゚レガンスを手に入れるこずができたす:)。 䞀番

@ Sacha0  trues / falsesはfillに盎接眮き換えるこずはできたせんが、 BitArrayむニシャラむザヌでfill!を䜿甚する必芁がありたす。 たた、 oneずoneunit間のあいたいさにも含たれおいたせん。 したがっお、私はそれらがこの議論にたったく圓おはたらないず思いたす。

ones 、ずにかく非掚奚にするこずに䞀般的に反察しおいたすが、メリットはわかりたせん。 fillするず、ある匏をより効果的に蚘述できるずいう議論は、私の意芋ではあたり説埗力がありたせん。これらの䟋はすべお、他のこずを行うための䞭間ステップずしおonesを䜿甚しおいるためです。 しかし、実際に配列が必芁な堎合はどうでしょうか。 その堎合、 fillを䜿甚する必芁があるのは長く、わかりにくく、煩わしいだけです。 @JeffBezansonの提案が䞀番奜きbaseたたはtestを、 ones代わりにfillを䜿甚しおより効果的に曞き換えるこずができる堎合、珟時点ではそれを劚げるものは䜕もありたせん。

@carlobaldassiそれは事実ですが、 GitHubをすばやく怜玢するず、䞭間の割り圓おを回避するために、 onesほずんどすべおの䜿甚で実際にfillを䜿甚する必芁があるこずがわかりたす...

これらの堎合にfillを䜿甚するこずは、私には理にかなっおいたす。 onesなどの察応するメ゜ッドを眮き換える新しいfill(x, A) = fill!(x, copymutable(A))メ゜ッドが必芁になるこずに泚意しおください。

@TotalVerbその怜玢の最初の10ペヌゞの簡単なonesの正圓なナヌスケヌスがたくさんあり、おそらく倧倚数ですそしお、たずえ20ず蚀ったずしおも、私の䞻匵はただ有効だず思いたす。

私は実際に読みやすさの議論に぀いおも留保しおいたす。たずえば、 fill(2, 2, 2, 2)は2 * ones(Int, 2, 2, 2)よりも読みやすい、たたはたずえばfill(k * 1.0, 3)方が読みやすいず䞻匵するのは疑わしいず思いたす。 k * ones(3)よりも読みやすい;それが単なる習慣の問題であるずはたったく確信しおいたせん。しかし、これはマむナヌな点です。

true / falseは、fillで盎接眮き換えるこずはできたせんが、fillを䜿甚する必芁がありたす。 BitArrayむニシャラむザを䜿甚したす。 たた、1ナニットず1ナニットの間のあいたいさにも含たれおいたせん。 したがっお、私はそれらがこの議論にたったく圓おはたらないず思いたす。

実際、 truesずfalsesはfill盎接眮き換えるこずはできたせん:)。 むしろ、 truesずfalsesは、䞊蚘の/11557に関連する䞀般的な問題の远加のむンスタンスですそしお、配列コンストラクタヌの最近の方向性がうたくいけば取り組むでしょう。 他の䟋ずしおは、BandedMatrices.jlにbones 、 bzeros 、 brand 、 brandn 、 beyeが存圚するこずや、 DistributedArrays.jlのdプレフィックス。

いずれにせよ、私は䞀般的にそれを非掚奚にするこずに反察しおいたす、私は利点を芋おいたせん。 これらの䟋はすべお、他のこずを行うための䞭間ステップずしお匏を䜿甚しおいるため、塗り぀ぶしを䜿甚しおより効果的に匏を蚘述できるずいう議論は、私の意芋ではあたり説埗力がありたせん。

ベヌスでones数癟の䜿甚法を曞き盎したばかりなので、 @ TotalVerbのステヌトメントを確認できたす。

GitHubをすばやく怜玢するず、䞭間の割り圓おを回避するために、ほずんどすべおの甚途で実際に塗り぀ぶしを䜿甚する必芁があるこずがわかりたす...

線集ほがすべおではなく玄半分ず蚀いたすが、適切な曞き換えはfill以倖のものである可胜性がありたす。さらに、その曞き換えの経隓は私に教えおくれたした...

しかし、実際に配列が必芁な堎合はどうでしょうか。 その堎合、塗り぀ぶしを䜿甚する必芁があり、より長く、目立たなくなり、煩わしくなりたす。

...䞀方、その堎合、 fillはしばしば短くお単玔です芁求されたものはしばしばFloat64はありたせん代わりにones(Int, n...)ずones(Complex{Float64}, n...) 、この堎合、 fillは、リテラルたずえば、 fill(1, n...)およびfill(1.0 + 0im, n...) を蚱可するこずにより、短く簡単になりたす。 枬定可胜な甚語で蚀えば、ベヌスでones呌び出しを曞き換えおいるブランチは、 ones -> fill曞き換えから、文字数が最倧5短くなっおいたす。 䞀番

onesが実際にどのように衚瀺されるかを客芳的に理解するために、GitHub怜玢の最初の10ペヌゞに衚瀺されるすべおのones呌び出しを収集しお、Juliaコヌドでonesを怜玢したした。そのような各呌び出しは、必芁に応じお、察応する倉曎を分類しこの芁点を参照、分類デヌタを次の芁玄に枛らしたした。

分析には、156のones呌び出しが含たれおいたした。 それらの呌び出しのうち、

  • 84回の呌び出し〜54はアドホックfill 。 たずえば、 ones(100)/sqrt(100)*7はfill(7/sqrt(100), 100) ones(100)/sqrt(100)*7簡略化されたすが、さらに良いのはfill(.7, 100)です。私のお気に入りはkron(0.997, ones(1, J*J*s) -> fill(0.997, 1, J*J*s) 。

  • 3回の通話〜2はアドホックブロヌドキャストでした。 たずえば、 A - ones(n,n)はA .- 1.簡略化されたす。

  • 5回の呌び出し〜3は、アドホックなベクトルリテラルでした。 たずえば、 ones(1)は[1.]簡略化されたす。

  • 1回の呌び出し〜0.5は、意味的にはゞャンクマトリックス構造でした。 実際には比范的たれですが、このパタヌンはtest/非垞に䞀般的です。これは、たずえば<strong i="32">@test_throws</strong> DimensionMismatch BLAS.trsv(...,Vector{elty}(n+1))ず<strong i="34">@test_throws</strong> DimensionMismatch BLAS.trsv(...,ones(elty,n+1)) 、初期化されおいないArrayの簡朔な䟿利なコンストラクタヌがないためです。 <strong i="34">@test_throws</strong> DimensionMismatch BLAS.trsv(...,ones(elty,n+1)) 。

残りの呌び出しはonesずしお意味的に合理的oneが特に必芁であるずいう理由ではなく、単に短いずいう理由だけでonesが䜿甚されるこずがよくありたす。 それらの残りの呌び出しのうち、

  • 13回の呌び出し〜8は、 fillわずかに短かった。 たずえば、 ones(Int, n, n) -> fill(1, n, n)たたはones(Float64, n) -> fill(1., n) 。

  • 50回の呌び出し〜32は、 fillわずかに長くなりたした。 たずえば、 ones(n, n) -> fill(1., n, n) 。

党䜓ずしお、実際には、 ones呌び出しの玄60は他の方法で蚘述した方が適切であり、玄8は意味的にonesあり、 fillずわずかに短く、 ones 、 fillより少し長くなりたす。

远加の芳察

配列匕数を受け入れるones呌び出しのむンスタンスが1぀だけ発生したしたが、それを囲むスニペットが実際のコヌドであるかどうかは明確ではありたせんでした。 したがっお、配列匕数を受け入れるonesメ゜ッドは、実際にはほずんど䜿甚されたせん。

本圓に興味深い議論...たた別の蚀語の先䟋ずしお、Rは、䜿甚しおいたす...偎のために偎に察しおであるこずから行っおきたしたrepずmatrixず等䟡である方法で、 fill 1dず2dの堎合に察応そしおあなたは非垞にすぐにそれに慣れたす-私がれロ/ワンの䞖界から来たずしおも。

うわヌ、その努力をしおくれおありがずう@ Sacha0 

圓然、「 zerosどうですか」ずいう質問が発生したす。 䜿甚量が倧幅に増え、䜿甚カテゎリがいく぀か増えるず思いたす「初期化されおいない配列を信頌しない」、「 Arrayコンストラクタヌの䜿甚方法がわからない」など。 "。

䜕らかの理由で私はそれがの察称性だず思うoneずzero 、Iはやや䞡方亀換する方に惹かonesずzerosずfill 、たたはどちらでもない。

れロの堎合は、次のいずれかの状況にあるように芋えるずいうこずです。

  1. ほずんどのれロを䞊曞きする必芁がありたす。この堎合、理解床を䜿甚するこずをお勧めしたす。
  2. ほずんどのれロを眮き換える必芁はありたせん。この堎合、スパヌス行列を䜿甚するこずをお勧めしたす。
  3. 実際には、すべおれロの行列が必芁です。この堎合は、 0Iを䜿甚するこずをお勧めしたす。

密なれロの行列を実際に割り圓おるこずが実際に良い考えであるずいうナヌスケヌスは実際にはありたせん。

それはおそらく線圢代数にも圓おはたりたす。 コンパむラやその他のデヌタ構造に関する私の䜜業で、れロで初期化されたコレクションが必芁になるこずは珍しくありたせん。 たぶんそれらはたばらであるこずが倚いですが、それらをコンパクトに衚珟するこずはパフォヌマンスに圱響を䞎える䟡倀がありたせん。

十分に公平です–密床を気にしない堎合があり、単玔さはそれだけの䟡倀がありたす。

トリアヌゞ完党に非ゞェネリックなメ゜ッド、぀たりzeros(dims...)ずones(dims...) 、おそらくzeros(dims)ずones(dims)も保持するこずを解決したした。

䜿甚方法掚奚事項に぀いおは@StefanKarpinskiはそれがどういう意味をお勧めでしょうzeros(3, 3)の䞊にfill(0.0, 3, 3) 密な配列は、などなどたかったされおいる堎合通垞のコヌドのために 効率性などの詳现のいく぀かは私の手の届かないずころにありたす、私は前進するゞュリアでどのようにベスト/むディオムの実践を教えるかを考えおいたす。

この決定は私には非垞に驚くべきこずのように思われたす。䞀般性を具䜓的に劚げるこずは基本的にそれほど䞀般的ではありたせん。 背埌にある理由は䜕ですか この関数は、ゞェネリックではないそしお、floatでのみ機胜するmatlabからのものですか

トリアヌゞ完党に非ゞェネリックなメ゜ッドのみを保持するこずを解決したした

背埌にある理由は䜕ですか

これに加えお、この問題は、珟圚怜蚎されおいるず思われる配列を構築する䞀般的な問題に䜕らかの圢で関連しおいたすかもしそうなら、これはどのように圹立ちたすか たたは、゚クスポヌトされるメ゜ッドの数をBaseから削枛しようずしおいたすか たたは完党に䜕か他のもの

https://github.com/JuliaLang/julia/issues/24595で近日公開予定:)。 䞀番

24595のOPは、この問題のより広範なコンテキストを詳しく説明しおおり、24595のフォロヌアップでは、コンビニ゚ンスコンストラクタヌones 、 zeros 、およびfillに぀いお詳しく説明しおいたす。 前者を読むこずは、埌者を理解する䞊で䟡倀がありたす。 䞀番

たあ、少なくずもFloat64堎合を保存するこずは、䜕もないよりはたしです。
敎数のれロの堎合も非垞に関連性があるず思いたす。これは、基本的に@vtjnashがここで䜜成したポむント

zerosは、 3 * ones(n)アンチパタヌンを蚱可するずいう「問題」がないこずにも泚意しおください。 実際、䟿利なコンストラクタヌであるずいう広い意味を陀いお、 onesずzerosが䞀緒になる理由はよくわかりたせん。 これら2぀の間に実際の「察称性」はありたせん。

統蚈分析に関するいく぀かの远加のコメント。これは、以䞋の議論ず24595の蚘述の基瀎であるように思われるためです。 たず、10ペヌゞでは、実際に䜕が起こっおいるのかをきめ现かく結論付けるには十分ではなく、せいぜい倧たかなアむデアを䞎えるこずができたす。 たずえば、名前やスタむルから明らかなように、䞀郚のファむルはmatlabから盎接取埗されたした。 第二に、私が掚枬したように、その分析でさえ、そこでのonesの䜿甚の玄半分が「正圓な」ものであったこずを瀺しおいたす。 第䞉に、このようなコヌドを芋おも、 3 * ones(...)曞くずきに䜕もわかりたせんが、実際にはパフォヌマンスの問題を匕き起こすアンチパタヌンであるか、パフォヌマンスにたったく圱響を䞎えないコヌドですそしおラむタヌはそのように曞かれおいる方が読みやすいず刀断したした。その堎合、他の人が他の方法で決定するこずはないず匷く感じおいたす。

最埌のポむントに関連しお、そしおもっず重芁なこずに、github怜玢から埗られるものは、ゞュリアで探玢的/予備的な䜜業をしおいる人々のREPLで䜕が起こっおいるかを決しお考慮に入れおいないず思いたす。 これはたさに䟿利な機胜が最も䟿利な堎所であり、認識できる理由なしにそれらを取り陀くこずはそれに応じお最も厄介です。 私のポむントは、䞀般的で効率的なコヌドを曞くこずを可胜にする盎亀プリミティブの䞀貫したセットを持぀こずは倧きな目暙であり、そこに到達するための努力は本圓に称賛に倀したす。 すべおのコヌドが矎しく、䞀般的で、構成可胜なラむブラリコヌドであるずは限らないずいうだけです。 ちょうど私の2セント。

それにかんする

敎数のれロの堎合も非垞に関連性があるず思いたす。これは、基本的に@vtjnashがここで䜜成したポむントです。

これは

コンパむラやその他のデヌタ構造に関する私の䜜業で、れロで初期化されたコレクションが必芁になるこずは珍しくありたせん。 たぶんそれらはたばらであるこずが倚いですが、それらをコンパクトに衚珟するこずはパフォヌマンスに圱響を䞎える䟡倀がありたせん。

その堎合、 fillも同様たたはそれ以䞊に機胜するこずに泚意しおください fill(0, shape...)察zeros(Int, shape...) 。

他の点に関しおは、24595は読む䟡倀があるかもしれたせん:)。 䞀番

zeros(Int, 10, 10)はfill(0, 10, 10)よりも読みやすく、明瀺的であり、 zeros(T, k)はfill(zero(T), k)よりも優れおいるこずがわかりたした。 なぜ私たちは䞡方を持぀こずができないのですか zerosがonesず同じあいたいさの問題を抱えおいるずいう議論は買いたせん。

他の点に぀いおは、24595を読む䟡倀があるかもしれたせん

私はそれを読んだ。 私もそれをリンクしたした。

私はそれを読んだ。 私もそれをリンクしたした。

24595を完党に読み、十分に怜蚎するず、24595が次のこずに気付くでしょう。1䟿利なコンストラクタヌが䞀郚にすぎないずいうはるかに広範な問題に関係しおいる。 2䞊蚘の統蚈分析ず、ここで焊点を圓おるポむントだけではありたせん。

onesずzerosに぀いお匷く感じおいただきありがずうございたす。 あなたの感情は倧声ではっきりず䌝わっおきたした:)。 そのため、珟圚の圢でこの䌚話を続けるよりも、他の分野を前進させるために垯域幅を費やしたほうがよい可胜性がありたす。 䞀番

zeros倉曎に䌎う䞀般的なfill着信はありたすか zerosは、 similarよりもはるかに安党であるため、ゞェネリックプログラミングに非垞に合法的に䜿甚されおいたため、DiffEqはすべお、最近、OptimずNLsolveがsimilar割り圓おからzerosすべおがれロを持぀ように割り圓おられおいるこずを知っおいるので、倚くのバグを防ぐこずができたす。 ただし、次の方法はないようです。

zeros(X)

もう、以倖

similar(X); fill!(X,0)

珟圚のfillはArray fillのみをビルドするため、 similarやzerosようにタむプマッチしたせん。 zerosを悪甚しお、必芁のないずきに割り圓おる人もいるこずは知っおいたすが、倚くの堎合、 zeros割り圓おるのは非垞に合理的なこずです。 この空癜を埋めるためにfill(0,X)速蚘が远加されるこずを願っおいたす。

思いやりのある投皿クリスに感謝したす :)暫定的な速蚘の代わりずしお、 zero(X)はトリックを行いたすか

このようなナヌスケヌスが正確であるこずを泚意における曖昧zerosおよびones問題ずなり埗る。ずにzeros(X)収率でオブゞェクトeltype(X)を充填eltype(X)の加法単䜍元぀たりfill!(similar(X), 0) 、たたは代わりにeltype(X)乗法れロで満たされたオブゞェクトおそらくeltype(X)  拡匵に぀いおは、24595を参照しおください。

fill(0, X)抂念は、11557で少し議論されおいたすが、それがfill有甚な䞀般化である可胜性があるこずに同意したす。 ありがずう、そしお最高

もう1぀の問題は、型にはたらないむンデックスを持぀配列をzeros(inds...)ようなもので䜜成したい堎合があるこずですむンデックスタむプが配列タむプを決定するため。 しかし、1次元の堎合、 X 「類䌌させたい配列」ですか、それずも「目的の配列のむンデックス」ですか 結局のずころ、 AbstractUnitRange <: AbstractArrayです。具䜓的には、 zeros(3:5)はfill!(similar(3:5), 0)たたはfill!(OffsetArray(Vector{Float64}(3), 3:5), 0)意味したすか

https://github.com/JuliaLang/julia/pull/24656をリンクし{ones|zeros }(A::AbstractArray, ...)コンビニ゚ンスコンストラクタヌの远加の説明が含たれおいたす。 䞀番

24656に埓っおキャッシュ倉数を䜜成するためにzerosを䜿甚するのは奇劙だず考えられおいるこずに驚いおいたす。 zerosがれロに近いオヌバヌヘッドに削枛された堎合、人々がsimilarを䜿甚しおいるほずんどの堎合は、代わりにzerosになるはずです。これは、かなりの数を修正する傟向があるためです。バグ。 similarは非垞に危険であり、関数がなく、代わりにfill! + similarをたずめるず、それがわかりにくくなるため、より倚くの人にこれを行うように勧めるべきだず思いたす。人々がすべきこず。 Optim.jlでポップアップするこれに぀いおのコメントは次のずおりです。

https://github.com/JuliaNLSolvers/NLsolve.jl/issues/89#issuecomment -294585960

しかし、私は@timholyに同意し

https://github.com/JuliaDiffEq/MultiScaleArrays.jl

MultiScaleArrays.jlは、埮分方皋匏゜ルバヌで䜿甚できる再垰的なグラフのような構造である抜象配列を䜜成したしたそしお、Optim.jlおよびNLsolve.jlず互換性があるず思いたすか。 これは、ずりわけ生物孊的モデルにずっお非垞に䟿利です。 それをODE゜ルバヌに投げ蟌むずき、質問がありたすキャッシュ配列を䜕にすべきですか 堎合によっおは、ナヌザヌが必芁な配列を取り戻すこずが重芁です。これは、ODE関数f(t,u,du)衚瀺され、それに応じお凊理したい堎合があるためです。 ただし、それ以倖の堎合は、内郚でブロヌドキャストされたものずしおのみ衚瀺されたす。 したがっお、2぀の異なるタむプのキャッシュ倉数がありたす。

これを凊理するには、次のいずれかのアルゎリズムのキャッシュを確認しおください。

https://github.com/JuliaDiffEq/OrdinaryDiffEq.jl/blob/master/src/caches/low_order_rk_caches.jl#L224 -L234

ここで、 rate_prototype = similar(u,first(u)/t,indices(u)は䌌おいたすが、ナニットのeltypeが異なる可胜性がありたす。 ただし、ここには2぀の異なるタむプがあるこずに泚意しおください similar(u)ずsimilar(u,indices(u)) 。 私はそれらを「タむプず圢状を䞀臎させる」察「圢状ず゚ルタむプを䞀臎させるが、同じタむプである必芁はない」ずいう意味であるず解釈したした。 したがっお、 AbstractMultiScaleArray堎合、最初のものは別のAbstractMultiScaleArrayを䜜成し、もう1぀は、ナヌザヌに衚瀺されないため速床を䞊げるために、適切なArrayを䜜成したす。サむズ。 次に、これはsimilar(u,T)ずsimilar(u,T,indices(u))拡匵されたす。

たぶんそれはすでに存圚するものを駄排萜にしおいるだけですが、これは重芁な違いだず思いたす。 ゞェネリックプログラミングを行う堎合、2぀の別々のキャッシュがありたす。タむプを期埅に䞀臎させるために必芁なナヌザヌ向けキャッシュず、アルゎリズムによっお䜿甚されるだけで可胜な限り高速にする必芁がある内郚キャッシュです。

zerosバヌゞョンを思い付くのが面倒だったので、これらがsimilarを䜿甚しおいるこずに泚意しおください。 ナヌザヌがf(t,u,du)埮分蚈算でduのみを蚭定した堎合、「蚭定しないこずは意味する」ず暗黙的に蚀う傟向があるため、実際にはこれらの配列の䞀郚をれロにするこずができる別の堎所がありたす。れロ」、これはzerosで割り圓おられた堎合にのみ圓おはたるので、可胜な限りzerosを䜿甚しお事前割り圓おを詊みたすこれに぀いおはNLsolve.jlでも同じ問題が発生したす 。

うたくいけば、その説明は埓うのにそれほど混乱しおいたせんでした。 私の堎合はすべお、 similar続けおfill!に切り替えるこずができたすが、䞀郚のパッケヌゞは切り替えられず、それがバグの原因になるこずはわかっおいたす。

面癜い。 similar(A, inds)がsimilar(A)ずは異なるタむプを䜜成する可胜性があるこずは確かですが、䞀般的には、同じタむプを異なるむンデックスで䜜成する可胜性が高いず垞に考えおいたした。 たずえば、2次元オブゞェクトの列方向の操䜜に1次元のキャッシュが必芁な堎合は、 similar(A, first(inds))たす。 もちろんの次元がタむプパラメヌタであるため、それは別のタむプであるが、それは同じ抜象コンテナタむプかもしれたせん。たた、小さなタむルなどの5x5のキャッシュを䜜成するためにそれを䜿甚するこずができたす

党䜓ずしお、これは難しい問題のようです。 ゲヌムの埌半ですが、 sameを導入する必芁がありたすか similarず同じ匕数を持぀こずができたすが、契玄では、同じ抜象コンテナヌを返す必芁がありたす。

same 1぀の匕数圢匏をサポヌトできたすが、これでも泚意が必芁です。 aがsetindex!サポヌトしおいない堎合、 same(a)は同じ配列型を返すこずができないこずに泚意しおください。 sameずsimilarは、埌で配列に曞き蟌む堎合にのみ圹立぀ため、 setindex! 。 䞍倉のa堎合、これを゚ラヌにするこずができたすが、 AbstractArrayむンタヌフェむスずしお、これは正しい汎甚コヌドを䜜成するために䞍芁そしおおそらく圹に立たないのようです。

同様に、すべおのAbstractArrayが異なるeltypeたたはむンデックスをサポヌトできるずは限りたせん。 私にずっお、2぀たたは3぀の匕数圢匏のsameがあるず、倚くの堎所で実行時゚ラヌが発生するだけで、䞀般的なコヌドがどのAbstractArrayでもうたく機胜するずいう誀った安心感を人々に䞎えたす。

しかし、1次元の堎合、Xは「類䌌させたい配列」ですか、それずも「目的の配列のむンデックス」ですか

これは、 keysが同じむンデックスず倀を持぀コンテナを返し、これをsimilar芁件にするこずに賛成するもう1぀の理由ですで1぀の敎数を指定しない限りこの堎合、 Base.OneTo CartesianRangeが想定されたす。

この議論は18161に向かっお進んでおり、おそらくそこで継続する必芁がありたす:)。

最近のトリアヌゞは、 ones維持するこずに傟いおいたした。

それらを維持するこずは痛いですか ずんぐりした出身の人がゞュリアでく぀ろげるのに圹立぀ず思いたす。

onesずzerosたす。

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