私は次の問題で立ち往生しています:
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
観測のセットである場合もあります) )。
私は私が要求しているかもしれないことを知っています。しかし、私はかなり長い間この問題に完全に行き詰まっています...したがって、どんな助けも大歓迎です。