【问题标题】:Get the initial matrix of a shuffled matrix in matlab在matlab中获取一个混洗矩阵的初始矩阵
【发布时间】:2017-04-26 17:27:11
【问题描述】:

我有问题。我用连体方法对矩阵进行了洗牌,并使用了以下代码:

function magic = magicsquare(matrix,n)
magic=zeros(n,n);
i=1;
j=(n+1)/2;
for ki=1:n
for kj=1:n
  is=i;
  js=j;
  magic(i,j)=matrix(ki,kj);
  i=n-rem(n+1-i,n);
  j=rem(j,n)+1;
  if magic(i,j)~=0
    i=rem(is,n)+1;
    j=js;
  end
end
end

现在,只有洗牌矩阵,我需要得到初始矩阵。我怎样才能做到这一点? 另外我不得不提一下,我的矩阵只包含 0 和 1。

更新:如果我有一个数字从 1 到 n 的幻方(我测试了一个 11x11 和 5x5 的矩阵),那么获取初始矩阵的代码是:

function magic = reversemagicsquare(matrix,n)
i=1;
j=(n+1)/2;
for ki=1:n
  for kj=1:n  
      is=i;
      js=j;
      magic(ki,kj)=matrix(i,j);
      i=n-rem(n+1-i,n);
      j=rem(j,n)+1;
  end
    if matrix(i,j)~=0
    i=rem(is,n)+1;
    j=js;
end
end

但我的问题是我有一个包含 1 和 0 的矩阵。在这种特殊情况下,上述解决方案不起作用。

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    为什么不在第 3 行添加以下内容和一个附加函数输出:

    function [magic,original_matrix] = magicsquare(matrix,n)
    magic=zeros(n,n);
    original_matrix= magic; %original matrix
    i=1;
    j=(n+1)/2;
    for ki=1:n
    for kj=1:n
      is=i;
      js=j;
      magic(i,j)=matrix(ki,kj);
      i=n-rem(n+1-i,n);
      j=rem(j,n)+1;
      if magic(i,j)~=0
        i=rem(is,n)+1;
        j=js;
      end
    end
    end
    

    另外,仅供参考,magic 是 matlab 中的内置函数,如果您将变量命名为 magic,您将覆盖函数定义,因此我建议使用类似 magic_matrix 的名称.

    【讨论】:

    • 因为这个函数是加密过程的一部分。所以在解密部分我只会有我的魔法函数的输出,我需要从中得到原始图像
    猜你喜欢
    • 2020-07-09
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多