例如,我想转到以下列:
[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
答案 0 :(得分:3)
内置函数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
答案 1 :(得分:3)
hankel函数可用于生成矩阵:
col = [90; 175; 600; 650; 655; 660]
result = hankel(col, flip(col));
答案 2 :(得分:2)
以下代码将执行您想要的操作:
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)
一次,而是计算{{1}的索引从col
和i
使用。