実現したいこと
例えば、次のような行列Vと、スパース行列Aが与えられているとします。
この2つの行列を用いて、以下のような3d×5のスパース行列を作成したいです。
試したこと
理論上は、以下のコードを用いると、得たい行列は作成できます。
matlab
1repmat(V,3,1).*repelem(A,d,1)
matlab
1>> A = sparse([0,1,0,0,0;1,-1,1,0,1;-1,0,0,1,0]); 2>> V = [1,2,3,4,5;6,7,8,9,10]; 3>> full(repmat(V,3,1).*repelem(A,2,1)) 4 5ans = 6 7 0 2 0 0 0 8 0 7 0 0 0 9 1 -2 3 0 5 10 6 -7 8 0 10 11 -1 0 0 4 0 12 -6 0 0 9 0
となります。
しかしながら、この方法では、計算の途中で以下の3d×5の密行列を計算する必要があります。
matlab
1>> repmat(V,3,1) 2 3ans = 4 5 1 2 3 4 5 6 6 7 8 9 10 7 1 2 3 4 5 8 6 7 8 9 10 9 1 2 3 4 5 10 6 7 8 9 10
そのため、Aの行数「3」や、Aの列数「5」が大きくなった場合に、PCのメモリ不足を引き起こします。
行列演算をなるべく使い(for文などのMatlabの実行時間が長くなるようなものを極力使わない)、かつPCのメモリ不足を引き起こさない方法を思いつく方はいますでしょうか?
Matlabのバージョン
R2020a
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/30 04:21