【问题标题】:Expand a matrix by given a parameter K, by inserting zeros in its between its original elements通过给定参数 K 扩展矩阵,在其原始元素之间插入零
【发布时间】:2014-05-07 09:59:58
【问题描述】:

假设我有一个大小为3-by-3 的矩阵A

A = [a11, a12, a13; a21, a22, a23; a31, a32, a33];

然后我指定一个参数K,说K是2,那么我想要的是让A变成

a11  0  0  a12  0 0  a13  0  0
 0   0  0   0   0 0   0   0  0
 0   0  0   0   0 0   0   0  0
a21  0  0  a22  0 0  a23  0  0
 0   0  0   0   0 0   0   0  0
 0   0  0   0   0 0   0   0  0
a31  0  0  a32  0 0  a33  0  0
 0   0  0   0   0 0   0   0  0
 0   0  0   0   0 0   0   0  0

在哪里,我在原始元素之间插入 K 行和零列。

在 MATLAB 中是否有任何官方函数可以做到这一点?

【问题讨论】:

    标签: matlab matrix expand


    【解决方案1】:

    对于方阵,A

    代码

    %%// Parameter
    K = 3; 
    
    [x1,y1] = meshgrid(0:size(A,1)-1,0:size(A,1)-1)
    
    x1 = bsxfun(@times,x1,K)+1
    y1 = bsxfun(@times,y1,K)+1
    
    Anew = zeros(size(A)*K)
    Anew(sub2ind(size(Anew),y1(:),x1(:)))=A
    

    【讨论】:

      【解决方案2】:

      两种替代方法

      索引: 将out 初始化为零,然后使用索引填充所需的元素

      out=zeros(size(A)*(K+1));
      out(1:K+1:end,1:K+1:end)=A
      

      克罗内克张量积: 生成一个矩阵来与每个元素相乘,然后使用kron 函数

      temp=zeros(K+1),temp(1)=1
      out=kron(A,temp)
      

      【讨论】:

      • 谢谢,我也很想玩 sparse 来构建它,但找不到优雅的方式,
      • 我猜对于这个简单的任务来说,稀疏太多了。我认为也可以使用单元阵列,但同样可能需要大量工作。
      • 我知道有点矫枉过正,但只是为了构建矩阵,然后将其恢复为完整,例如使用您答案中的变量full(sparse(x1,y1,A,9,9))
      • 酷!它适用于 x1y1 将被互换的修复,meshgrid 如何输出结果有点奇怪。 OP 已经掌握了几种方法!
      猜你喜欢
      • 1970-01-01
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      相关资源
      最近更新 更多