【问题标题】:matlab efficient copying of matrixmatlab高效复制矩阵
【发布时间】:2012-06-21 06:28:47
【问题描述】:

我有矩阵 (a) 和 (1:10), 双倍。我想复制这些值并将它们按列重新排列到另一个矩阵变量中。 (b)。请参见下面的示例。另外,什么方法在这项任务中最有效?

matrix a    matrix b

1            1
2            2  2
3            3  3  3  
4            4  4  4  4
5            5  5  5  5  5
6            6  6  6  6  6  6
7            7  7  7  7  7  7  7
8            8  8  8  8  8  8  8  8
9            9  9  9  9  9  9  9  9  9
10           10 10 10 10 10 10 10 10 10 10

更新: 嗨再次Amro。如果我想定义要复制的值怎么样。见下例:

matrix a    matrix b
column:      1  2  3  4  5  6  7

1            1
2            2  2
3               3  3  
4                  4  
5                     5  
6                     6     
7                        7  
8                        8     
9                           9  
10                         10 10 

【问题讨论】:

    标签: matlab matrix copying


    【解决方案1】:

    试试:

    >> a = (1:10)'
    a =
         1
         2
         3
         4
         5
         6
         7
         8
         9
        10
    
    >> b = tril(repmat(a,1,10))
    b =
         1     0     0     0     0     0     0     0     0     0
         2     2     0     0     0     0     0     0     0     0
         3     3     3     0     0     0     0     0     0     0
         4     4     4     4     0     0     0     0     0     0
         5     5     5     5     5     0     0     0     0     0
         6     6     6     6     6     6     0     0     0     0
         7     7     7     7     7     7     7     0     0     0
         8     8     8     8     8     8     8     8     0     0
         9     9     9     9     9     9     9     9     9     0
        10    10    10    10    10    10    10    10    10    10
    

    【讨论】:

    • @BernardUntalanJr.:恐怕你的新规范不完整。您如何定义要复制的值?
    • 我犯了一个愚蠢的错误。无论如何,user1434725 提供了一个解决方案。感谢您解决我的问题的第一部分。
    • 关于你提供的解决方案,有没有其他不涉及repmat的解决方案?
    • @BernardUntalanJr.:你对 REPMAT 有什么看法?无论如何,这里有几个选择:tril(a(:,ones(1,10)))tril(a*ones(1,10))
    • repmat 在处理大型矩阵时似乎内存不足
    【解决方案2】:

    我认为在您指定的第二个矩阵中您犯了一个错误。我假设你想做这样的事情:

    b =
    
     1     0     0     0     0     0
     2     2     0     0     0     0
     0     3     3     0     0     0
     0     0     4     4     0     0
     0     0     0     5     5     0
     0     0     0     0     6     6
    

    这很简单:

    %define vector of arbitrary length
    a=1:6;
    %generate b with shifted diagonal matrices
    b=diag(a)+diag(a(2:end),-1);
    

    diag 的第二个参数只是移动生成的对角线。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多