gpt4 book ai didi

c - C 中指向子矩阵的矩阵指针

转载 作者:行者123 更新时间:2023-11-30 15:03:43 24 4
gpt4 key购买 nike

我在 C 中有这个矩阵。

[1,2,3,4]
[5,6,7,8]
[9,10,11,12]
[13,14,15,16]

n x n,方阵。

我需要将其分成四个矩阵:

[1,2]  [3,4] [9,10]  [11,12]
[5,6] [7,8] [13,14] [15,16]

这将在数组中表示,如下所示:

数组[16] = [1,2,5,6,3,4,7,8,9,10,13,14,11,12,15,16]

到目前为止,我已经这样做了:

int i,j;
int k = 0;
for(i = 0; i < 2; i++ )
{
for(j = 0; j < 2; j++)
{
array[k] = matrix[i][j];
k++;
}
}

for(i = 0; i < 2; i++ )
{
for(j = 2; j < 4; j++)
{
array[k] = matrix[i][j];
k++;
}
}

for(i = 2; i < 4; i++ )
{
for(j = 0; j < 2; j++)
{
array[k] = matrix[i][j];
k++;
}
}

for(i=2;i<4;i++)
{
for(j=2;j<4;j++)
{
array[k] = matrix[i][j];
k++;
}
}

正如你所看到的,我为此做了 4 个 double,但是,有没有一种动态的方法来做到这一点?如果我有一个更大的矩阵,比如 8 x 8,该怎么做?如果更大则分割与示例相同。

最佳答案

您应该看到您正在复制的例程的模式。

基本上你做的是同样的事情,除了ij的开始和结束不同。因此,创建一个子例程并将它们作为参数传递。

例如:

void get_sub_matrix(int input[][N], int start_row, int end_row, int start_col, int end_col, int[] result, int* result_offset)
{
int offset = *result_offset;
for (int i = start_row; i < end_row; i++)
{
for (int j = start_col; j < end_col; j++)
{
result[offset++] = input[i][j];
}
}
*result_offset = offset;
}

请注意,随着更多元素添加到结果数组中,例程内的结果偏移量如何增加。

现在你可以做:

int matrix[N][N];
int array[N*N];
int k = 0;

get_sub_matrix(matrix, 0, 2, 0, 2, array, &k);
get_sub_matrix(matrix, 0, 2, 2, 4, array, &k);
get_sub_matrix(matrix, 2, 4, 0, 2, array, &k);
get_sub_matrix(matrix, 2, 4, 2, 4, array, &k);

P.S: 还没有编译过。

关于c - C 中指向子矩阵的矩阵指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40613937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com