【问题标题】:Concatenate two matrices in C在 C 中连接两个矩阵
【发布时间】:2013-03-04 17:06:20
【问题描述】:

我正在尝试在 C 中连接相同的矩阵,我想到的唯一想法是加法,但它不起作用。例如,如果我有:{1,1;2,2},我的新矩阵应该是{1,1,1,1;2,2,2,2}。我想将行数加倍。我用谷歌搜索,但没有找到任何东西。

这是我的代码:

 matrix2=realloc(matrix1,sizeof(int*)*(row));
 int i,j;
 for(i=0;i<row;i++){
   for(j=0;j<col;j++){    
    matrix2[i][j]=matrix1[i][j]+matrix1[i][j];
   }
 }

【问题讨论】:

  • 你的意思是你有一个矩阵,你想......行的大小加倍?
  • 正是...我用 realloc 分配的新矩阵
  • 在这段代码中我可以注意到matrix2[i][j]=matrix1[i][j]+matrix1; 有问题?
  • 这也是你concatenate 2 matrices 吗?如果不是你!从这里得到一个想法:)
  • 不,我刚试过。我不知道如何把它们放在一起。只是我需要的提示

标签: c matrix


【解决方案1】:

使用我在下面提供的伪代码。请注意,对于 C99 之前的任何 C,您不能使用 int matrix[2*W][H] 实例化数组(如果 W 和 H 不是 #defines)

Given matrix1 and matrix 2 of equal W,H
make matrix3 of 2*W,H
for h to H
    for i to W
        matrix3[h][i] = matrix1[h][i]
        matrix3[h][i+W] = matrix2[h][i]

制作矩阵每行需要 1 个 malloc,外加 1 个 malloc 来存储行指针数组。

请注意,循环中需要 2 个作业,而不是之前的作业。这是因为你在两个地方设置。

【讨论】:

  • 你的第一句话需要澄清。
  • @StoryTeller 谢谢。这样更好吗?
  • 其实没有。如果WH 是编译时常量,您可以声明一个二维数组。见这里ideone.com/byYkYX
  • 我建议您先检查一下,而不是相当确定。 ideone.com/2XaH4d 宏由预处理器处理。这是简单的文本替换。结果是一个算术表达式,可以计算为编译时间常数。
  • @StoryTeller 很好,我改了措辞。
【解决方案2】:

您听起来好像有 matlab 等高级语言的背景。在 C 中,加号运算符不连接矩阵。这将添加矩阵中的值并将新值存储到新矩阵中。

【讨论】:

    【解决方案3】:

    这里我们将输入矩阵复制到一个新矩阵中两次

    for(int i = 0; i

    for(int i = 0 ; i

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多