【问题标题】:How to create a symmetrical matrix out of a column?如何从列中创建对称矩阵?
【发布时间】:2017-11-03 19:41:31
【问题描述】:

例如,我想转以下列:

[90; 175; 600; 650; 655; 660] 

进入矩阵:

[ 90, 175, 600, 650, 655, 660; 
 175, 600, 650, 655, 660, 655; 
 600, 650, 655, 660, 655, 650; 
 650, 655, 660, 655, 650, 600; 
 655, 660, 655, 650, 600, 175; 
 660, 655, 650, 600, 175,  90] 

我会使用什么算法?

到目前为止我有:

col = [90; 175; 600; 650; 655; 660];
[numrows, temp] = size(col);
Z = zeros(numrows, numrows);
for i = 1:1:numrows
    for j = 1:1:numrows
        Z(i,j) = col(i);
        Z(j,i) = col(i);
    end
end

【问题讨论】:

    标签: algorithm matlab matrix


    【解决方案1】:

    内置函数toeplitz 在几次翻转后给出你想要的:

    >> col = [90; 175; 600; 650; 655; 660];
    >> result = flipud(toeplitz(flip(col)))
    result =
        90   175   600   650   655   660
       175   600   650   655   660   655
       600   650   655   660   655   650
       650   655   660   655   650   600
       655   660   655   650   600   175
       660   655   650   600   175    90
    

    【讨论】:

      【解决方案2】:

      hankel函数可用于生成矩阵:

      col = [90; 175; 600; 650; 655; 660] 
      result = hankel(col, flip(col));
      

      【讨论】:

        【解决方案3】:

        下面的代码会做你想做的事:

        col = [90; 175; 600; 650; 655; 660];
        numrows = size(col, 1);
        Z = zeros(numrows, numrows);
        for i = 1:numrows
            for j = 1:numrows
                Z(i,j) = col(numrows - abs(numrows - (i+j-1)) );
            end
        end
        

        Z(j,i) = col(i) 紧跟在Z(i,j) = col(i) 之后的行显示了您对代码理解的一个严重缺陷。鉴于您正在遍历矩阵的每个索引,这将导致多次写入许多索引,每次都有不同的结果。它确实给你一个对称的图案,但不是你想要的。而不是使用Z(i,j) Z(j,i),你应该(就像我上面所说的那样)只分配给Z(i,j)一次,而是计算col的索引以使用@987654328 @ 和 j

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-17
          • 1970-01-01
          • 2018-01-25
          • 2019-07-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多