3

対応の配列が与えられた場合、別の配列にマップしたい 1 つの配列にいくつかのデータがあります。

  • originaldatanumpy の 2D 配列であり、
  • targetdata別のnumpy 2D配列であり、
  • mappingは位置間をマッピングする配列であるため、 のデータがどこから来るmapping[x,y]かの座標のペアが得られます。targetdata[x,y]originaldata

これまでのところ、私は次のようなことをしています:

for (x,y) in ALLTHEPOINTS:
    targetdata[x,y]=originaldata[mapping[x,y][0],mapping[x,y][1]]

...これは非常に非効率的だと思います。

これをベクトル化する方法はありますか?または、このタイプの操作に対処する numpy 関数はありますか?

4

1 に答える 1

6

これは、派手なインデックス作成のためにあるものです。

targetdata = originaldata[mapping[..., 0], mapping[..., 1]]

簡単な例として:

>>> original_data = np.arange(6).reshape(2, 3)
>>> original_data
array([[0, 1, 2],
       [3, 4, 5]])
>>> mapping = np.array([[[1,0], [1, 1], [1, 2]],   # swap rows and reverse
...                     [[0, 2], [0, 1], [0, 0]]]) # the second one
>>> original_data[mapping[..., 0], mapping[..., 1]]
array([[3, 4, 5],
       [2, 1, 0]])
于 2013-10-29T01:09:16.487 に答える