改变矩阵的索引

Changing index of matrix

我正在尝试更改以下代码,使第一个矩阵成为第二个矩阵:

function BellTri = matrix(n)
BellTri = zeros(n);
BellTri(1,1) = 1;
for i = 2:n
  BellTri(i,1) = BellTri(i-1,i-1);
  for j = 2:i
    BellTri(i,j) = BellTri(i - 1,j-1) + BellTri(i,j-1);
  end
end
BellTri

第一个矩阵(当 n = 7 时)

 1     0     0     0     0     0     0
 1     2     0     0     0     0     0
 2     3     5     0     0     0     0
 5     7    10    15     0     0     0
15    20    27    37    52     0     0
52    67    87   114   151   203     0
203   255   322   409   523   674   877

第二矩阵

1     1     2     5     15    52    877
1     3     10    37    151   674     0
2     7     27    114   523    0      0 
5    20     87    409    0     0      0
15   67     322    0     0     0      0
52   255    0      0     0     0      0
203   0     0      0     0     0      0

一种方法:

out = zeros(size(A));
out(logical(fliplr(triu(ones(size(A,1)))))) = A(logical(tril(ones(size(A,1)))));

注意:正如 Divakar 所指出的,第一行应该有错别字。此方法给出更正后的。

结果:

A = [1     0     0     0     0     0     0;
     1     2     0     0     0     0     0;
     2     3     5     0     0     0     0;
     5     7    10    15     0     0     0;
    15    20    27    37    52     0     0;
    52    67    87   114   151   203     0;
    203   255   322   409   523   674   877];

>> out

out =

   1     2     5    15    52   203   877
   1     3    10    37   151   674     0
   2     7    27   114   523     0     0
   5    20    87   409     0     0     0
  15    67   322     0     0     0     0
  52   255     0     0     0     0     0
 203     0     0     0     0     0     0

一个选项是使用circshift循环排列列。

function [BellTri, Second] = matrix(n)
BellTri = zeros(n);
BellTri(1,1) = 1;
for i = 2:n
  BellTri(i,1) = BellTri(i-1,i-1);
  for j = 2:i
    BellTri(i,j) = BellTri(i - 1,j-1) + BellTri(i,j-1);
  end
end

Second = BellTri;

for i = 1:n
    Second(:, i) = circshift(Second(:,i), 1-i);
end

for i = n-1:-1:2
    Second(1, i) = Second(1, i-1);
end
end

输入:[BellTri, Second] = matrix(7)

输出:

BellTri =

     1     0     0     0     0     0     0
     1     2     0     0     0     0     0
     2     3     5     0     0     0     0
     5     7    10    15     0     0     0
    15    20    27    37    52     0     0
    52    67    87   114   151   203     0
   203   255   322   409   523   674   877


Second =

     1     1     2     5    15    52   877
     1     3    10    37   151   674     0
     2     7    27   114   523     0     0
     5    20    87   409     0     0     0
    15    67   322     0     0     0     0
    52   255     0     0     0     0     0
   203     0     0     0     0     0     0