4 次元の nxnxnxn 配列 A があるとします。A は距離行列で、A[i,j,l,k] は位置 i,j から位置ペア l,k までの距離です。位置タイプ T の nxn 行列があるとします。タイプは 0、1、または 2 のいずれかであり、T[i,j]=2 は i,j 番目の位置がタイプ 2 であることを意味します。抽出する最も簡単な方法は何ですかT[i,j]=2 および T[l,k]=1 であるような A のすべての [i,j,l,k] エントリ。これは、タイプ 1 の場所からタイプ 2 の場所までのすべてのパスの距離を意味します。 .
私の考えは、次のようなものを使用することでした
type.0 = which(T == 0, arr.ind=T)
type.1 = which(T == 1, arr.ind=T)
type.2 = which(T == 2, arr.ind=T)
しかし、問題は、A が 4 次元であるため、R がインデックスを作成する方法は、A[type.0,type.1] を実行できるようにならないことです。もちろん、ループでそれを行うこともできますが、それを行うためのより良い方法はありますか.
ここで過去の回答を見つけることができませんでしたが、何かを見逃した可能性があります。
これは、2 つのタイプ 0 と 1、位置 (1,1) の 2x2 ラティス、タイプ 0 (1,2)、タイプ 0、(2,1)、タイプ 1、および (2,2) の単純なテスト ケースです。タイプ1。
A = array(c(0,1,1,1.4,1,0,1.4,1,1,1.4,0,1,1.4,1,1,0), dim = c(2, 2, 2, 2))
T = matrix(c(0,1,0,1),2,2)
タイプ 0 のセルからタイプ 1 のセルまでのすべての距離が必要です