ケース1(解決済み):アレイAは形状(例えば、300,50)を持っています。配列Bは、の横に「concate」する別の行のインデックスをi
行に示すように、形状(300,5)を持つインデックス配列です。最終結果は、形状が(300,5,50)の配列Cであり、C[i,j,:] = A[B[i,j],:]
です。これはA[B,:]
を呼び出すことによって行うことができます。ナンシー・アドバンスド・インデックスの使用
import numpy as np
## A is the data array
A = np.arange(20).reshape((5,4))
## B indicate for each row which rows to pull together
B = np.array([[0,2],[1,2],[2,0],[3,4],[4,1]])
A[B,:] #The desired result
ケース2(未解決):今だけAが(100,300,50)成形され同じ問題、
ここで、ケース1のための小さなスクリプト例です。 Bが指標行列形状(100,300,5)である場合、最終結果は形状が(100,300,5,50)の配列Cであり、C[i,j,k,:] = A[i,B[i,j,k],:]
となります。 A[B,:]
は、放送のために形状(100,300,5,300,50)になってしまったため、もう動作しません。
インデックスを作成するにはどうすればよいですか?
!事例2は、指標が相対的な位置を表しているため、それらを平坦化するときにグローバルに移動する必要があるため、修正が必要です。私がしたことは、 'B_new = B +(B.shape [1] * np.arange(B.shape [0]))[:, np.newaxis、np.newaxis]'です。しかし、このトリックは私の問題を解決しました!ありがとう。 – YotamH