2016-05-27 20 views
2

コードを改善するための支援を探しています。私は異なるサイズの2つの配列を持っていて、ある配列の値を別の配列のインデックスに代入しています。 例えば2つの配列の要素を一致させて値を返す方法

a = np.array([[1,5],[2,8],[3,2],[4,6]]) 
b = np.array([[1],[1],[2],[4],[4],[2],[3],[2],[3]]) 

iがBに対応する行への第2列から値を割り当てる最初の列の項目をmathchingです。

c = [[5],[5],[8],[6],[6],[8],[2],[8],[2]] 

問題を返す

c = np.zeros([len(b),1]) 
for i in tqdm(range(len(b))): 
    for j in range(len(a)): 
     if b[i,0]==a[j,0]: 
      c[i] = a[j,1] 

は、私は非常に大規模なデータセットを持っているし、ループの実行には本当に長い時間がかかるです。どんな提案も大歓迎です。ありがとう。

+1

どの言語を使用しますか? –

+0

[codereview.se]は、最適化が必要な作業用コードです。 –

+0

申し訳ありません、私はPythonを使用しています –

答えて

1

aは常に[[1, ...], [2, ...], [3, ...], ...]の形式ですか?

そうであれば、aを反復しないで、時間を節約することができます。たとえば:

a = np.array([[1,5],[2,8],[3,2],[4,6]]) 
b = np.array([[1],[1],[2],[4],[4],[2],[3],[2],[3]]) 

c = np.array([[a[i[0] - 1][1]] for i in b]) 
# c = [[5], [5], [8], [6], [6], [8], [2], [8], [2]] 

これはb時間の大きさの代わりに、b時間のa倍のサイズの大きさのオーダーの順序がかかります。

+0

ありがとうございます。これは私が探していたものです。 –

関連する問題