首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按顺序对这些行执行n次Matlab.Copying

按顺序对这些行执行n次Matlab.Copying
EN

Stack Overflow用户
提问于 2013-07-08 16:58:11
回答 2查看 93关注 0票数 1

嘿,我想做一些类似以下的事情

代码语言:javascript
复制
A = [...
   1 2 3
   4 5 6
   7 8 9]

代码语言:javascript
复制
B = [...
   1 2 3
   1 2 3
   1 2 3
   4 5 6
   4 5 6
   4 5 6
   7 8 9
   7 8 9
   7 8 9]

但请不要建议手动操作的东西。我正在写一个算法,输入和矩阵的维数可能会改变。

EN

回答 2

Stack Overflow用户

发布于 2013-07-08 17:01:40

有几种方法。我认为最简单的方法是使用Kronecker product

代码语言:javascript
复制
B = kron(A, ones(3,1))

更快但可读性较差的解决方案是通过乘法和重塑进行复制:

代码语言:javascript
复制
B = reshape((A(:) * ones(1,3))', 3*size(A,1),size(A,2))

或者相同的解决方案,但是使用repmat

代码语言:javascript
复制
B = reshape(repmat(A(:).',3,1), 3*size(A,1),size(A,2))
票数 3
EN

Stack Overflow用户

发布于 2013-07-08 17:24:20

您也可以基于以下内容进行尝试:

代码语言:javascript
复制
a = [1 2 3]
b = [4 5 6]
c = [7 8 9]

d = [ a; a; b; b; c; c]

e = [ repmat([a], [2, 1]) ;
      repmat([b], [2, 1]) ;
      repmat([c], [2, 1]) ] 

de的结果矩阵如下:

代码语言:javascript
复制
=

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

要追加更多行,您还可以使用此for循环,并查看结果:

代码语言:javascript
复制
 e = [] 
 for i = 1:2    
      e = [ e;
            repmat([a], [2, 1]) ;
            repmat([b], [2, 1]) ;
            repmat([c], [2, 1]) ]  
 end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17522568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档