【问题标题】:How to prepend a column to a matrix?如何将列添加到矩阵中?
【发布时间】:2009-08-07 13:46:29
【问题描述】:

好的,假设我有这个矩阵:{{1,2},{2,3}},我宁愿有 {{4,1,2},{5,2,3}}。也就是说,我在矩阵中添加了一列。有什么简单的方法吗?

我最好的建议是:

PrependColumn[vector_List, matrix_List] := 
 Outer[Prepend[#1, #2] &, matrix, vector, 1]

但它会混淆代码,并且不断需要加载越来越多的代码。这不是以某种方式内置的吗?

【问题讨论】:

    标签: matrix wolfram-mathematica


    【解决方案1】:

    因为 ArrayFlatten 是在 Mathematica 6 中引入的,所以必须是最少混淆的解决方案

    matrix = {{1, 2}, {2, 3}}
    vector = {{4}, {5}}
    
    ArrayFlatten@{{vector, matrix}}
    

    一个不错的技巧是用0 替换任何矩阵块会给你一个大小合适的零块。

    【讨论】:

      【解决方案2】:

      我认为最常见的方法是转置、前置和再次转置:

      PrependColumn[vector_List, matrix_List] := 
        Transpose[Prepend[Transpose[matrix], vector]]
      

      【讨论】:

        【解决方案3】:

        我认为最不晦涩的方法是:

        PrependColumn[vector_List, matrix_List] := MapThread[Prepend, {matrix, vector}];
        

        一般来说,MapThread 是您最常用于此类任务的函数(我一直在向数组添加标签时使用它,然后用Grid 很好地格式化它们),它可以使使用Prepend 而不是等效的Prepend[#1, #2]&,事情会更清晰、更简洁。

        【讨论】:

          【解决方案4】:

          THE... 绝对.. BY FAR... 从我对数组RandomReal[100,{10^8,5}] 的各种方法的测试中追加或预先添加一列的最快方法(孩子们,不要在家里尝试这个...如果您的机器不是为速度和内存而构建的,在这个大小的数组上的操作保证会挂起你的计算机) ...这是:Append[tmp\[Transpose], Range@Length@tmp]\[Transpose]。 随意将Append替换为Prepend

          下一个最快的是:Table[tmp[[n]]~Join~{n}, {n, Length@tmp}] - 几乎慢了一倍。

          【讨论】:

          猜你喜欢
          • 2015-06-21
          • 1970-01-01
          • 2014-07-06
          • 1970-01-01
          • 1970-01-01
          • 2017-06-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多