ある配列を任意の配列の要素順にソート

「[3, 8, 5, 8]」という配列があった時,
ターゲット配列である「[8, 8, 3, 5]」の
順番となる様なindexingを求めたいとする.

numpy.argsortとnumpy.searchsortedを組み合わせる事で求められる.
numpy.searchsortedはデフォルトでは昇順の配列に対する挿入位置を求める為,
任意の要素順である場合,配列を昇順にソートする必要がある.
引数sorterでそれができるが,indexingよりも効率が悪いので,
適宜,fancy indexingがリーズナブル(N数が大きくなると,2倍以上).

import numpy as np


a = [3, 8, 5, 8]
b = [8, 8, 3, 5]
np_a = np.array(a)
np_b = np.array(b)

ind = np_a.argsort()
idx = ind[np.searchsorted(np_a[ind], np_b)]
idx, np_a[idx]
(array([1, 1, 0, 2]), array([8, 8, 3, 5]))
広告
カテゴリー: 未分類 パーマリンク

ある配列を任意の配列の要素順にソート への1件のフィードバック

  1. ピンバック: ある配列から別の1次元numpyアレイの要素の出現数を調べる – 配列aについて配列bの要素をカウント | 粉末@それは風のように (日記)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中