私は2つのp倍n配列x
とmissx
を持っています。ここで、x
は任意の数を含み、missx
は0と1を含む配列です。 missx
がゼロである点で再帰的計算を実行する必要があります。明白な解決策は次のように次のようになります。このアプローチのRのfor-loopのような任意のインデックスに対するFortranのdo-loop?
do i = 1, n
do j = 1, p
if(missx(j,i)==0) then
z(j,i) = ... something depending on the previous computations and x(j,i)
end if
end do
end do
問題は時間missx
のほとんどは常に0であるということですので、非常に多く、常に真であるif
文があります。 Rで
、私はこのようにそれを行うだろう:Fortranでそのような内部ループを行う方法が
for(i in 1:n)
for(j in which(xmiss[,i]==0))
z[j,i] <- ... something depending on the previous computations and x[j,i]
ありますか?私はこのようなバージョンを試してみました:、
do i = 1, n
do j = 1, xlength(i) !xlength(i) gives the number of zero-elements in x(,i)
j2=whichx(j,i) !whichx(1:xlength(i),i) contains the indices of zero-elements in x(,i)
z(j2,i) = ... something depending on the previous computations and x(j,i)
end do
end do
これは(xlength
とwhichx
を定義するの量をカウントしない場合)最初のソリューションよりも若干速いように見えたが、Rのバージョンのようにこれにいくつかのより多くの巧妙な方法がありますだから私はそれらのxlength
とwhichx
アレイを格納する必要はありませんか?
ありがとうございます。 –