(N-1) 次元配列を使用して N 次元配列に効率的にアクセスするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-10-21 11:57:03
オリジナル
135 人が閲覧しました

How to Access N-Dimensional Array with (N-1)-Dimensional Array Efficiently?

(N-1) 次元配列を使用して N 次元配列にアクセスする

N 次元配列 a と (N- 1) 次元配列 idx の場合、一般的なタスクは、idx のインデックスで指定された要素にアクセスすることです。これは、最大値の検索や特定の値の取得などの操作を実行する場合に役立ちます。

高度なインデックス作成を使用したエレガントなソリューション

エレガントなソリューションには、NumPy の ogrid 関数による高度なインデックス作成の使用が含まれます。 :

<code class="python">m, n = a.shape[1:]
I, J = np.ogrid[:m, :n]
a_max_values = a[idx, I, J]
b_max_values = b[idx, I, J]</code>
ログイン後にコピー

これにより、インデックスのメッシュグリッドが作成され、それを使用して a と b にインデックスが付けられ、対応する値を含む配列が得られます。

関数を使用した一般的なケース

任意の指定された軸に対して機能する、より一般的な解決策として、関数を定義できます。

<code class="python">def argmax_to_max(arr, argmax, axis):
    new_shape = list(arr.shape)
    del new_shape[axis]

    grid = np.ogrid[tuple(map(slice, new_shape))]
    grid.insert(axis, argmax)

    return arr[tuple(grid)]</code>
ログイン後にコピー

この関数は、配列、指定された軸に沿ったその argmax、および軸自体を受け取ります。 。次に、メッシュグリッドを構築し、それを使用して対応する要素を抽出します。

カスタム関数による簡素化されたインデックス作成

インデックス作成プロセスをさらに簡略化するために、ヘルパー関数を作成できます。インデックスのグリッドを生成します:

<code class="python">def all_idx(idx, axis):
    grid = np.ogrid[tuple(map(slice, idx.shape))]
    grid.insert(axis, idx)
    return tuple(grid)</code>
ログイン後にコピー

この関数は、入力配列にインデックスを付けるために直接使用できるインデックスのタプルを返します:

<code class="python">axis = 0
a_max_values = a[all_idx(idx, axis=axis)]
b_max_values = b[all_idx(idx, axis=axis)]</code>
ログイン後にコピー

以上が(N-1) 次元配列を使用して N 次元配列に効率的にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!