2

指定された変換テーブルに従って、numpy 配列内の要素を変換する際に問題があります。たとえば、2D 変換テーブル trTab があるとします。

import numpy as np
trTab = np.array([[0, 1, 2, 3 ,4, 5,
                  [5, 2, 3, 1, 0, 4]])

where にtrTab[0, :]は可能なすべての ID (整数) が保持trTab[1, :]され、後で使用されるそれらの翻訳が保持されます。の両方の行の IDtrTabは一意です。次に、フレームの numpy 配列の最初の列にあるすべての ID を変換する必要があります。

frame = np.array([[0, ...],
                  [3, ...],
                  [5, ...],
                  [1, ...]])

これで、 、、、および と[[5, ...], [1, ...], [4, ...], [2, ...]]等しくなります。0->53->15->41->2

frame行数が異なる可能性があります。実際には、長い一連のフレームを変換する必要があります。0 番目の列の ID はframe順番通りである必要はなく、可能なすべての ID を使用する必要はありません。

すべての値trTabを単純にループするのではなく、そのような各フレーム配列を指定に従って変換する簡単で高速な方法はありますか? fr[:, 0]処理するフレーム数が数千の場合、ループは非常に時間がかかります。

4

2 に答える 2

1

trTab最初の行と最初の列が常に数値である場合frameは、次のことができます。

import numpy as np
from numpy import subtract as s
fancy_indices = np.absolute(s.outer(frame[:,0],trTab[0,:])).argmin(axis=1)
frame[:,0] = trTab[1,:][fancy_indices]
于 2013-06-29T11:18:46.760 に答える
0

なぜ辞書を使わないのですか?

dic={0:5,1:2,2:3,3:1,4:0,5:4}
frame= np.array([[0,1],[3,2],[5,3],[1,4]])
frame[:,0]=[dic[x] for x in frame[:,0]]
于 2013-06-29T13:05:31.670 に答える