Juliaの構造体の配列のフィールドにアクセスするための最良の方法

アダムウィーラー
struct Point
   x :: Int
   y :: Int
end

aタイプの配列がある場合Array{Point}、これよりもフィールドアクセスを行うためのより良い方法(構文的にクリーンまたは高速)はありますか?

(p->p.x).(a)
Gnimuc

最もクリーンな方法は、@ pabloferzによってDiscourse最初に投稿された独自の演算子を定義することですhttps//discourse.julialang.org/t/broadcast-over-getfield-in-0-6/2335/4

struct Point
   x :: Int
   y :: Int
end

a = [Point(i,j) for i = 1:10 for j = 1:10]

↦(val, s) = getfield(val, s)
a .↦ :x
a .↦ :y

更新:

今のところ、小さい(p->p.x).(a)場合、他のソリューションの中でクイックベンチマークショーが最速aです。長さは、時にa大きな成長し、両方mapcomprehensionわずかに速くよります(p->p.x).(a)

julia> versioninfo()
Julia Version 0.6.0
Commit 903644385b* (2017-06-19 13:05 UTC)
......

julia> @btime (p->p.x).($a)
  88.283 ns (1 allocation: 896 bytes)

julia> @btime [ z.x for z in $a ]
  109.578 ns (2 allocations: 912 bytes)

julia> @btime map(p->p.x, $a)
  163.485 ns (3 allocations: 944 bytes)

julia> @btime getfield.($a,:x)
  1.586 μs (101 allocations: 4.00 KiB)

julia> a = [Point(i,j) for i = 1:100 for j = 1:100]

julia> @btime getfield.($a,:x);
  160.845 μs (10002 allocations: 390.70 KiB)

julia> @btime (p->p.x).($a);
  9.817 μs (2 allocations: 78.20 KiB)

julia> @btime map(p->p.x, $a);
  8.306 μs (3 allocations: 78.22 KiB)

julia> @btime [ z.x for z in $a ];
  8.306 μs (3 allocations: 78.22 KiB)

getfieldは常に他の方法よりも10〜20倍遅いため、最もクリーンな方法はパフォーマンスが高くありません。しかし、状況は将来改善されると思われますMake .a syntactic sugar for i->i.a #22710これには構文糖衣構文がありますか?:

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

構造体の3D配列にアクセスするためのC#の最良の方法

Cの配列内の構造体フィールドへのアクセス

mysqlの関連フィールドにアクセスするための最良の方法

構造体の和集合で構造体の最初のフィールドにアクセスする

JSONフィールドをクラス構造にアップグレードするための最良の方法

QMLでcpp構造にアクセスするための最良の方法

Golangで構造体のネストされたフィールドにアクセスする方法

operator []を使用して構造体の指定されたフィールド値にアクセスする方法

フィールドに直接アクセスする場合の構造体のモック方法

フルパスを含む特定の文字列で構造体フィールドにアクセスする

Golangの構造体から特定のフィールドにアクセスする方法

Golangでこの構造体のフィールドにアクセスする方法

特定のキーで構造体のマップの構造体フィールド値にアクセスする方法

リフレクトを使用して構造体内の構造体フィールドにアクセスする

関数から構造体のインスタンスフィールドにアクセスする方法は?

その配列へのポインタを使用して、構造体の配列に含まれる構造体のフィールドにアクセスするにはどうすればよいですか?[C ++]

Juliaで構造体フィールド値の配列を変更する

ネストされた構造体のフィールドにアクセスする

配列のような方法で構造体メンバーにアクセスする:配列とは異なる構造体のパディング?

forループに介入して、配列内のフィールド値を取得するための最良の方法

タプル構造体でラップされた列挙型構造体バリアントのフィールドにアクセスします

テンプレートの構造体フィールドにアクセスする方法

文字列を使用してタイプ[] byteの構造体フィールドにアクセスする

構造体フィールドを非表示にして、フィールドのアクセスと変更を同期させる最良の方法は何ですか?

構造内のフィールドの要素に直接アクセスする方法

ループせずにmatlabの複数の構造体フィールドにアクセスする

Goの元のC構造体のフィールドにアクセスする

小さな構造体の既知の配列をシリアル化するための良い方法

内部構造体を参照せずに、別の構造体内の構造体フィールドにアクセスする

TOP 一覧

  1. 1

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  2. 2

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  3. 3

    Ansibleで複数行のシェルスクリプトを実行する方法

  4. 4

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  5. 5

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  6. 6

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  7. 7

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  8. 8

    Chromeウェブアプリのウェブビューの高さの問題

  9. 9

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  10. 10

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  11. 11

    Reactでclsxを使用する方法

  12. 12

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  13. 13

    MLでのデータ前処理の背後にある直感

  14. 14

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

  15. 15

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  16. 16

    mutate_allとifelseを組み合わせるにはどうすればよいですか

  17. 17

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

  18. 18

    テキストフィールドの値に基づいて UIslider を移動します

  19. 19

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  20. 20

    PowerShellの分割ファイルへのヘッダーの追加

  21. 21

    ソートされた検索、ターゲット値未満の数をカウント

ホットタグ

アーカイブ