我有一个二维矩阵
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};
无需将原始数组转换为二维数组。如何做到这一点?
最佳答案
这可以通过切换通常用于索引它的循环来完成。如果你想要原始矩阵,你可以像这样遍历它
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");
}
}
这与二维矩阵转置的数学定义有关。二维矩阵的转置操作将行与列交换,在 C 程序中,当我们对其进行索引时,我们交换行和列循环。
关于c - 如何转置存储为 C 1D 数组的 2D 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32404915/