【问题标题】:Matrix multiplication using one-dimensionsal arrays in C使用 C 中的一维数组进行矩阵乘法
【发布时间】:2016-05-16 16:47:28
【问题描述】:

我在 C 中乘以适当的矩阵(以两个一维数组的形式)时遇到了一些麻烦。无法创建或删除任何变量。

正确的结果应该是:http://s32.postimg.org/nrkigh2l1/IMG_20160516_183316.jpg

打印周期应该是正确的。

#include <stdio.h>

void main(){
    unsigned int m = 3;                              // first matrix number of rows
    unsigned int n = 2;                              // first matrix number of columns
    unsigned int k = 4;                              // second matrix number of columns
    short int mat1[] = { -1,-2,   4, 5,   4, -2 };   // first matrix (3x2)
    short int mat2[] = { 2, 0, 0, 0,   0, 2, 0, 0 }; // second matrix 2x4)
    int mat3[1024];                                  // final matrix (3x4)




     // printing final matrix
    unsigned int i, j, h;
    printf("Final matrix:\n");
    for (i = h = 0; i < m; i++){
        for (j = 0; j < k; j++, h++)
            printf("%6d ", mat3[h]);
        printf("\n");
    }
}

【问题讨论】:

  • 发布您尝试过的内容并指出您认为问题出在哪里。
  • 我不明白如何使用索引(行数和列数)在矩阵中滑动。
  • 看看this,用一维数组表示索引。如果你有mat1[3][2],那么就像在你的声明中一样......
  • 先用铅笔在纸上解决这个问题。将行命名为列并在解决此问题时听取自己的意见。
  • [0][0]-&gt;[0]; [0][1]-&gt;[1]; [1][0]-&gt;[2]; 等在 3*2 矩阵中。

标签: c arrays matrix-multiplication


【解决方案1】:

其他人已经展示了如何将不同维度的矩阵相乘。您需要做的就是将代码转换为以二维矩阵的形式访问一维向量。

所以,给定 [假设] 矩阵:

#define XDIM    10
#define YDIM    5
int mtx[YDIM][XDIM];

要将其转换为矢量:

int vec[YDIM * XDIM];

访问一个元素,而不是:

mtx[ypos][xpos]

用途:

vec[(ypos * XDIM) + xpos]

您可以对不同的矩阵使用不同的值重复此技术。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 2012-05-02
    • 2019-05-01
    • 2018-04-11
    • 2021-08-14
    • 2021-12-26
    • 2021-07-20
    • 2012-05-30
    相关资源
    最近更新 更多