让我说我有向量
layers
我想从x创建一个对称矩阵。即一个对称矩阵,其中x为第一行和第一列,x0为对角线。换句话说,我想要这样的矩阵X:
x = [x0, x1, x2, x3] = [0, 2, 3, 1].
问题:
计算机科学不是我的专长,因此到目前为止,我的所有尝试都是可笑的,并且涉及一个又一个循环。我缺少明显的东西吗?
谢谢
答案 0 :(得分:2)
诀窍在于, input 数组中的索引是 output 数组中的索引的总和。 例如,
output[0][3] = output[1][2] = output[2][1] = output[3][0] = input[3]
但是,这有两个问题:
首先,主对角线(上/左至下/右)始终是输入数组的第一个元素。通过检查输出索引是否相等,可以将其作为特殊情况处理。
然后,当 output 索引的总和大于允许的最大 input 索引时,该怎么办。在这种情况下,输入数组的索引是通过减法计算的,如下面的代码所示。
#define SIZE 4
int input[SIZE] = {0,1,2,3};
int output[SIZE][SIZE];
for (int row = 0; row < SIZE; row++)
for (int col = 0; col < SIZE; col++)
{
if (row == col) // special case for the main diagonal
output[row][col] = input[0];
else if (row + col < SIZE) // normal case for small indexes
output[row][col] = input[row+col];
else // special case for large indexes
output[row][col] = input[2*(SIZE-1) - (row + col)];
}