【问题标题】:Insert an element into matrix through loop in Mathematica在 Mathematica 中通过循环将元素插入矩阵
【发布时间】:2014-05-07 12:26:14
【问题描述】:

我正在尝试通过 for 循环增加下面矩阵的大小,但代码给出了一个错误,直到此时我还没有找到解决方案。这是我的代码,

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

我该如何解决这个问题?

【问题讨论】:

    标签: for-loop matrix resize wolfram-mathematica


    【解决方案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}}
    

    【讨论】:

      【解决方案2】:

      一个巧妙的小技巧,使用SparseArray ..

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

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

      请注意,这会将整个数组复制到一个新的更大数组(ArrayPad 也是如此),因此您真的不希望经常对大型数组执行此操作。

      同样,对现有职位的“分配”也可以,但出于性能原因,您不想这样做:

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

      最好先定义一个足够大的SparseArray,而不是增加数组(创建一个巨大的空 SparseArray 几乎没有/没有内存命中)

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

      (只是不要试图打印这个..)

      完成后保存非空部分:

       mat=SparseArray[ArrayRules[mat]]
      

      【讨论】:

        猜你喜欢
        • 2021-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-06
        • 1970-01-01
        相关资源
        最近更新 更多