我有一个2D矩阵
1 2 3
4 5 6
7 8 9
像这样存储在C中
int array[9] = {1,2,3,4,5,6,7,8,9};
我希望得到像这样的矩阵的转置
int array_t[9] = {1,4,7,2,5,8,3,6,9};
不将原始数组转换为2D数组。怎么办呢?
答案 0 :(得分:7)
这可以通过切换通常用于索引它的循环来完成。如果你想要原始矩阵,你可以用这样的东西循环它
for (i = 0; i < 3; ++i) {
for (j = 0; j < 3; ++j) {
printf("%d ", array[j + i * 3]);
}
printf("\n");
}
如果我们切换i
和j
循环,我们可以获得所需的输出,如下面的示例程序
#include <stdio.h>
int main() {
int array[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int i, j;
for (j = 0; j < 3; ++j) {
for (i = 0; i < 3; ++i) {
printf("%d ", array[j + i * 3]);
}
printf("\n");
}
}
这与2D矩阵的转置的数学定义有关。 2D矩阵上的转置操作将行与列交换,在C程序中,当我们索引它时,我们交换行和列循环。