2014-05-07 300 views
0

我想通過for循環增加下面矩陣的大小,但代碼給出了一個錯誤,直到此時我才找到解決方案。這裏是我的代碼,在Mathematica中通過循環插入元素到矩陣

m = 1; 
n = 1; 
mat2 = Table[0, {m}, {n}]; 
For[i = 1, i <= n + 1, i++, 
    For[j = 1, j <= m + 1, j++, 
      mat2[[i, j]] = j 
    ]; 
    ]; 
mat2 // MatrixForm 

我該如何解決這個問題?

回答

1
In[1]:= m = 2; n = 2; mat2 = Table[i + j, {i, m}, {j, n}]; 
mat2 = ArrayPad[mat2, {0, 1}]; 
mat2 // MatrixForm 

Out[3]//MatrixForm= 
{{2, 3, 0}, 
{3, 4, 0}, 
{0, 0, 0}} 
0

一個整潔的小竅門使用SparseArray ..

mat = SparseArray[Table[1, {5}, {5}]] 

enter image description here

mat = SparseArray[Prepend[ArrayRules[mat], {6, 8} -> 9]] 

注意到這會將整個數組到一個新的更大的陣列(一樣ArrayPad),讓您真正不想經常爲大型陣列做這些事情。

enter image description here

同樣是「分配」到一個現有的位置的作品,但你不希望由於性能原因這樣做:

mat = SparseArray[Prepend[ArrayRules[mat], {2, 2} -> 3]] 

enter image description here

,而不是增長的數組你最好能夠首先定義足夠大的SparseArray(製作一個空的SparseArray時有很少/沒有內存命中)

mat = SparseArray[Table[1, {5}, {5}], {1000, 1000}]; 
mat[[6, 8]] = 9; 
mat[[2, 2]] = 3; 

(只是不嘗試打印這個..)

保存時的非空部分進行:

mat=SparseArray[ArrayRules[mat]] 

enter image description here