Tag: 矩阵

如何在C中动态分配矩阵?

我必须做这个练习: 在C中执行一个管理名为“M”的整数矩阵和一个名为“L”的整数列表的应用程序。 M是方形矩阵[nxn],其中n由用户动态选择。 然后执行此function: 序列化:给定“M”矩阵,它返回具有n ^ 2个元素的列表L. 列表的元素是从第一个到第二个按行排序的M的元素。 第二个function: 反序列化:给定具有n ^ 2个元素的列表L,它返回一个矩阵[nxn],其中L元素按列排序。 所以main()必须是: 用户给出矩阵(n)的维度并用一些整数填充矩阵。 然后调用serialize函数,打印序列化列表 将值5添加到列表的每个值 并调用反序列化函数 并打印最后一个函数给出的矩阵。 ( 所有分配必须是动态的。 ) 我试过这个: #include #include int main(){ int n,i,j; printf(“Give the dimension of matrix [nxn]: “); scanf(“%d”,&n); int **M; M = (int**)malloc(n*sizeof(int*)); for(i=0;i<n;i++){ M[i] = (int*)malloc(n*sizeof(int*)); } int *L = serialize(M,n); int size = n*n; for(i=0;i<size;i++){ […]

使用GSL计算矩阵Kronecker乘积的有效方法

我的算法的瓶颈是我的functionKronecker产品叫KPro: gsl_matrix *KPro(gsl_matrix *a, gsl_matrix *b) { int i, j, k, l; int m, p, n, q; m = a->size1; p = a->size2; n = b->size1; q = b->size2; gsl_matrix *c = gsl_matrix_alloc(m*n, p*q); double da, db; for (i = 0; i < m; i++) { for (j = 0; j < p; j++) { […]

OpenMP并行化(Block Matrix Mult)

我正在尝试实现块矩阵乘法并使其更加并行化。 这是我的代码: int i,j,jj,k,kk; float sum; int en = 4 * (2048/4); #pragma omp parallel for collapse(2) for(i=0;i<2048;i++) { for(j=0;j<2048;j++) { C[i][j]=0; } } for (kk=0;kk<en;kk+=4) { for(jj=0;jj<en;jj+=4) { for(i=0;i<2048;i++) { for(j=jj;j<jj+4;j++) { sum = C[i][j]; for(k=kk;k<kk+4;k++) { sum+=A[i][k]*B[k][j]; } C[i][j] = sum; } } } } 我一直在玩OpenMP,但是在找出在最短的时间内完成这项工作的最佳方法仍然没有运气。

从输入C动态分配矩阵

我一直在尝试这段代码而且效果不佳。 void *matrix_allocate_variable (int size) { void *p1; if ((p1=(int*)malloc(size))==NULL){ printf(“out of memory.\n”); exit(1); } return p1; } 在这里,我创建了一个调用malloc并在出错时退出的函数,以便我可以在我的下一个函数中使用它: void matrix_new(int **matrices, int *row_counts, int *column_counts, char specifier) { int index, i; index= (int)(specifier-‘A’); scanf(“%d”,&row_counts[index]); scanf(“%d”,&column_counts[index]); matrices[index]= (int*)matrix__allocate_variable(sizeof(int)* (row_counts[index]*column_counts[index]); 这是我遇到问题的地方。 我正在尝试让用户输入一些用于创建矩阵的输入,但是我在尝试使其工作时遇到了很多问题。 有人可以帮我开始吗? PS。 有关更多详细信息,我在functions.c中创建函数,这是我到目前为止所拥有的。 我有一个main.c调用这些函数,以便稍后我可以添加,减去和转置,但到目前为止,我正在尝试输入数据,这是我遇到很多麻烦。 这是我的main.c ,我称之为函数。 /* Pointer to the set of matrix registers. […]

NxN矩阵行列式递归问题

我目前正在尝试编写一个程序来找到NxN矩阵的行列式,但我有一个N大于2的递归问题。基本上我可以告诉它,它没有这样做,它只是运行一次使用函数我的调试选项显示该函数在列中运行,但顺序永远不会下降,然后无论如何,它都会为我的行列式提供零。 香港专业教育学院曾试图寻找任何想法,因为我做错了什么,但我似乎找不到任何答案,我甚至找到了与我做基本相同的事情的例子,使用它们给我零,不管怎么样,所以我非常困惑:(。如果有人可以快速查看我的代码并告诉我哪里是一个白痴,我会非常感激!(抱歉格式化,它在我的编辑器中看起来不错但我似乎无法得到它在这里) 码: #include #include #include double det(double **mat, int order); int main (int argc, char* argv[]) { FILE* input; int row,column,N; double **matrix; N=3; matrix=(double**)malloc(N*sizeof(double)); input=fopen(“matrix.dat”, “r”); if(input !=(FILE*) NULL) { for(row=0; row<N; row++) { matrix[row]=(double*)malloc(N*sizeof(double)); } for(row=0; row<N; row++) { printf("| "); for(column=0; column<N; column++) { fscanf(input,"%lf ", &matrix[row][column]); printf("%g ", matrix[row][column]); } […]

如何在C NOT C ++中将Mat转换为IplImage

我正在使用一些使用旧的不推荐的IplImage类型的旧C代码。 我正在使用Android的新OpenCV 2.3.1,我从相机获得的图像是CvMat 。 我想将它们转换为IplImage以便将其传递给本机函数。 或者,我可以修改原始函数以接受CvMat并将其转换为函数体内的IplImage ,但我需要在C NOT C ++中执行此操作。

gsl复杂矩阵*复杂向量

有人可以帮我弄清楚如何进行这项操作。 我正在查看文档,但它已经很久了,因为我必须做任何线性代数类型的东西,我有点迷失。 我有一个叫做Y的14×14复杂矩阵和一个叫做I的复矢量。我需要将它们相乘并将结果设置为一个名为IL的复矢量。 到目前为止,我已经发现我需要使用: gsl_blas_zgemv (CBLAS_TRANSPOSE_t TransA, const gsl_complex alpha, const gsl_matrix_complex * A, const gsl_vector_complex * x, const gsl_complex beta, gsl_vector_complex * y) 但我不确定究竟发生了什么。 不知道到底发生了什么。 像这样的东西? 但是alpha和beta是什么? gsl_blas_zgemv(CblasNoTrans, ???, &Y, &I, ???, IL);

为全局访问保存2D动态数组(矩阵)c

我正在尝试将使用函数填充的2D数组保存到全局内存中。 处理了许多矩阵,并且在成功时,需要保存正确的Matrix以访问许多function。 目前,函数中的矩阵是使用以下代码动态分配的: int **M = malloc(m * sizeof(int *)); for(i = 0; i < m; i++) M[i] = malloc(n * sizeof(int)); 我声明了一个全局变量(int ** M_save)。 在需要保存矩阵的主程序中,使用相同的过程初始化全局数组: **M_save = malloc(m * sizeof(int *)); for (i = 0; i < m; i++) M_save[i] = malloc(n * sizeof(int)); 然后通知该函数它需要在释放其内存之前保存矩阵,并在保存的函数中使用以下过程: if(saveMatrix == 1) { for(i = 0; i < […]

(C)在矩阵中获取行的3个最小元素,并随机选择一个

我有一个8×8矩阵,在选择了我想要的行之后,我想得到它的三个最小元素,并随机选择这三个中的一个。 问题是我不知道如何处理这三个元素。 我只知道如何获得最小元素,即以下代码。 int piezas[8][8] = { 0, 2, 2, 5, 3, 2, 1, 1, 0, 4, 5, 2, 4, 3, 0, 0, 0, 4, 2, 2, 1, 2, 3, 2, 0, 3, 1, 5, 1, 2, 3, 4, 2, 5, 6, 5, 3, 1, 2, 7, 8, 2, 0, 0, 0, 2, 1, 1, […]

在2D矩阵中找出相同的彩色块

我试图从2D矩阵的左上角开始找出一个相同颜色区域的块。 例如:我有以下矩阵: 1 1 1 2 2 3 1 1 2 3 4 5 1 1 1 1 3 4 1 4 3 2 1 5 2 3 4 5 1 2 比如,最初的左上角是1,我想找出包含1的相邻区域(我只考虑从左上角开始)。 在上面的矩阵中,数字1,2,3,4,5代表不同的颜色。 我尝试使用以下代码段来查找相同的颜色块: colors = [“red”, “green”, “blue”, “purple”, “orange”] # create an array of the colors so we can do work on […]