3

私は次の問題で立ち往生しています:


3 組のシーケンスがあるとします。

{a_1, ..., a_N}, {A_1, ..., A_T}, {b_1, ..., b_N}, {B_1, ..., B_T}, {c_1, ..., c_N}, {C_1, ..., C_T}.

私の目的は、次のアクションを実行することです(ループせずに!):

for (i in 1:N) {
  for (j in 1:N) {
    for (k in 1:N) {
      ret[i,j,k] <- \sum_{t=1}^T (a_i - A_t) * (b_j - B_t) * (c_k - C_t)
}}}

ループしたくない理由は、単純にこれら 3 つよりも多くのシーケンスのペアが存在する可能性があるためです。そして、コードをできるだけ「効率的かつ柔軟に」構成したいと考えています。

(N x T)シーケンスのペアが 2 つしかない場合、単純な行列の乗算 (最初の行列(a_i - A_t)と2 番目の転置を掛ける(N x T)行列) になるため、問題は非常に簡単です。(b_i - B_t)

しかし、シーケンスのペアが 2 つ以上になると、の次元outputはシーケンスのペアの数に依存するため、ループなしで実行できるかどうかはわかりません...


---------------------------------------------- 関連問題 (2013 年 11 月 8 日) ) ----------------------------------------------

@-mripのおかげで、最初の部分が正常に実装されました。しかし、次のことが必要な場合、コードをどのように変更する必要がありますか:

for (i in 1:N) {
  for (j in 1:N) {
    for (k in 1:N) {
      ret[i,j,k] <- \sum_{t=1}^T foo(a_i, a_i - A_t) * foo(b_j, b_j - B_t) * foo(c_k, c_k - C_t)
}}}

foo(a, a-A)一般的な二変量関数はどこにありますか。「一般的な」解決策はありますか、またはの構造に関する詳細情報が必要foo(a, a-A)ですか?

簡単なソリューションを使用して試し、ループを実装するだけでした。もちろん、これは柔軟ではありません(ペア/次元の可能な数に事前に制限する必要があるため)、高速でもありません(両方ともa大きくAなる可能性があるため-ただし、a単にスカラーとA観測のセットである場合もあります) )。

私は私が要求しているかもしれないことを知っています。しかし、私はかなり長い間この問題に完全に行き詰まっています...したがって、どんな助けも大歓迎です。

4

1 に答える 1