2014-05-07 167 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