使用C中的一维数组进行矩阵乘法

时间:2016-05-16 16:47:28

标签: c arrays matrix-multiplication

我在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");
    }
}

1 个答案:

答案 0 :(得分:-1)

其他人已经展示了如何将不同维度的矩阵相乘。您需要做的就是转换代码以将1D向量作为2D矩阵进行访问。

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

AC_DEFUN([AX_TEST_COMPILE_FLAG],
[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
AS_VAR_PUSHDEF([CACHEVAR] [ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
AC_CACHE_CHECK([whether _AC_LANG compiler can build and run with $1], CACHEVAR, [
  ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
  _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
  AC_RUN_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
    [AS_VAR_SET(CACHEVAR,[yes])],
    [AS_VAR_SET(CACHEVAR,[no])])
  _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
AS_VAR_IF(CACHEVAR,yes,
  [m4_default([$2], :)],
  [m4_default([$3], :)])
AS_VAR_POPDEF([CACHEVAR])dnl
])dnl AX_CHECK_COMPILE_FLAGS

将其转换为矢量:

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

要访问元素,而不是:

int vec[YDIM * XDIM];

使用:

mtx[ypos][xpos]

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