2017-05-16 4 views
0
A = sparse(10, 10); 
b = [2, 2; 4, 3; 5, 4] 
b = 
    2 2 
    4 3 
    5 4 

は私がしたいと思いBE:メモリ不足ながら、スパース行列で行列を割り当てる

A(b(:,1), b(:, 2)) = 1 

A = 
(2, 2) 1 
(4, 2) 1 
(5, 2) 1 
(2, 3) 1 
(4, 3) 1 
(5, 3) 1 
(2, 4) 1 
(4, 4) 1 
(5, 4) 1 

私の問題を:

A = 
    (2, 2) 1 
    (4, 3) 1 
    (5, 4) 1 

私の問題は、私は取得していますということであると思われます私が10の代わりに割り当てていることです>>>>1134890
bは3行からなる代わりに〜3M行。そして、コードが崩壊します。

メモリ不足。オプションでHELP MEMORYと入力します。

私のマトリックスが間違って作られていることを理解しているので、さらに多くの点が追加されています。

希望の出力を正しく達成する方法は?ありがとう! importdata(pathToFile)

EDITは

b私が使用してメモリから読んでいたテキストファイルを表します。そして、bが正しく構築されているのがわかります。

+0

ケアそれはエラーを与える? –

+0

@AnderBiguri 'A(b(:, 1)、b(:, 2))= 1' –

+0

私のPCで8Mbを要します。それでも、それは疎な行列を埋める最善の方法ではありません。作成したときにそれらを埋める方が良いですか? –

答えて

4

マトリックスを間違って埋めるだけです。

塗りつぶしと

A=sparse(b(:,1),b(:,2),1,10,10); 

を使用して、それを作成するには、(正直、それをやっていないしてみてください)Aを事前に割り当てる避けることができない場合は、でそれを埋めることができます:コードを表示する

index=sub2ind([10,10],b(:,1),b(:,2)); 
A(index)=1; 
+0

それは本当にトリックでした!私は10の代わりにAに渡す前にbの最大数を知る必要があります。ありがとう:) –

関連する問題