2017-06-05 8 views
0

私は3つのチャネルのデータを持っています。チャンネルはx、y、z座標を表します。たとえば、ポイントのx位置はチャンネル1に格納され、y位置はチャンネル2に格納されます。マルチチャネルnumpy ndarrayにトランスフォームを効率的に適用するにはどうすればよいですか?

これらのチャンネルで表される各ポイントに対して変換を実行したいと思います。つまり、各u、v位置でx、y、zに変換行列を掛けたいと思います。確かに、私は手動で各u、vの位置を反復し、位置データを抽出することができました。私はそれが最も効率的なアプローチではないように感じています。

私の質問は、位置データが各次元に対応するチャンネルに格納されているポイントの集合を変換する最も効率的なアプローチは何ですか?あなたが記述何

+0

一部のデータをモックアップします。これはフラットレコード配列ですか? M-by-N-by-3? –

答えて

1

は、単純マトリックス乗算である:

raw = numpy.array([ [1, 10, 100], [2, 20, 200], [3, 30, 300], [4, 40, 400] ]) 
transformation = numpy.matrix([ [1, 0, 0], [0, 0, 1], [0, -1, 0] ]) 
transformed = raw * transformation 

おそらく、あなたのデータは、より高い次元のこのM-データポイント・バイ-3-「チャンネル」の例よりもですか? uvが何を意味しているのかは不明ですが、問題が高次元である可能性があることを示唆しています。その場合はnumpy.tensordotnumpy.einsumを調べて、より高い次元への行列乗算を一般化するか、rawを実際の生データのviewに設定してreshapeをM-by-3に設定しますあなたがそれを元に戻すtransformedを作り直すことで終わります)。

関連する問題