遅い

2017-03-25 4 views
0

Aで解決の任意の選択肢は、()国の各産業が他の国の他の産業に関連しているどのくらいを表します。それは約1.00から値を取ることができます。したがって、行列Aの対角要素は1に近いが、行列Aのオフ対角要素は1よりもはるかに小さい。なぜなら、各業界は主にそれ自体に関連しているからである。遅い

I、Jはそれぞれ1:44の国を表します。
注意! ( "I" で(I-A_omitは(J、J)))DIAG(2464で解決する。
i、jは1:56それぞれの産業を表す。

Xが出力されます。長さのベクトル44の国X 56の業種= F(特定の国における産業の最終需要を表す2464 * 1行列である行列を乗じ
それは(DIAG(2464)-A)の逆数によって算出される2464年)

ここで、行列Xのj + 56 *(J-1)番目の列は、
ところで、解く(I-A_omit(J、j))の "I"は診断(2464)。 (solveを使用して)X_omit

1つの計算は、約20秒を要します。 Aは2464 * 2464マトリックスで、Xは2464 * 1マトリックスです。 計算すると仮定しますb_linkは約20秒* 2464の計算時間を要します。これは1つの単一値に対して14時間です。
しかし、この場合には、私は問題ではありませんIiを分離し、なぜならこの場合にはsumを使用して簡単な式に変更するために管理しています。 しかし、次の計算では、I,i,J,jのサイズが1:44,1:56,1:44,1:56であり、合計を使用するだけでなく、各文字を区切る必要があります。

私はより速くそれを作るための唯一の方法は、より高速な20秒かかりsolve()を作ることによってだと思います。 solve(I-A_omit(J,j))の[A]行列は対称ではなく、通常の行列には数字が入っています。

これはあなたがループの外X_omit(J,j)を計算することができます私のコード

X_omit <- function (J,j) {solve((I-A_omit(J,j)),F)} 
B_linkages_inter <- function (I,J) { 
    for (j in 1:56) { 
    for (i in 1:56) { 
     sum((X[i+56*(I-1)]-X_omit(J,j)[i+56*(I-1)])/X[j+56*(J-1)]) 
    } 
    } 
} 
+0

こんにちは、画像の代わりに質問にコードを追加できますか?おかげでps。 [小さな例を追加して、人々が作業するための期待される結果をもたらした場合はうれしいでしょう:フォーカスは問題の次元までスケールアップすることができます] – user20650

+0

更新いただきありがとうございますが、小規模で、あなたがしようとしていることを示してください。質問の末尾に追加してください。 – user20650

+0

'solve(A)%*%b'の代わりに' solve(A、b) 'を使うことができます。それは実際に行列を反転させないので、より速くなります。まだ遅い場合は、RのRevolution Rオープンディストリビューションを試してみてください。 – Ryan

答えて

1

です。また、ループ外でX[j+56*(J-1)])を計算することもできます。

+0

私はコードを国間の逆リンケージに変更しました。私の考えではループの外に出ることはできませんでした。 A_omit < - function(J、j){A [、j + 56 *(J-1)] < - 0; A}。 Aはちょうど2464 * 2464行列です。 – user73233

+0

なぜあなたはそのような方法でコードを変更して、それ以外に何も出てこないのでしょうか? – user31264

+0

前の1つは国の後方連鎖でした。さて、それは、私が知る必要があるデータでもある、国々間の後方連鎖です。 – user73233