当前位置:首页>开发>正文

稀疏矩阵 稀疏矩阵 pascal

2023-04-15 13:17:45 互联网 未知 开发

 稀疏矩阵 稀疏矩阵 pascal

稀疏矩阵

/*******************
*
** The prgroms function is to achieve the matrix convert from M*N to N*M)
*** Debug by : Turbo 2.0
************************/
#define M #define N #include<stdio.h>
main()
{
int i,j
int a[M][N],b[N][M]
printf("Enter the 2*3 matrix: ")
for(i=0i<Mi ) /* input the array a */
{
for(j=0j<Nj )
scanf("%d",&a[i][j])
}
for(i=0i<Mi ) /* out the array a */
{
for(j=0j<Nj )
printf("=",a[i][j])
printf(" ")
}
printf(" ")
for(i=0i<Mi )
{
for(j=0j<Nj )
{
b[j][i]=a[i][j] /* exchange the row and line */
}
}
for(i=0i<Ni ) /* output the array b*/
{
for(j=0j<Mj )
printf("=",b[i][j])
printf(" ")
}
}

稀疏矩阵 pascal

如果不知道矩阵的行数列数,就只能用文件输入,不能用屏幕输入。
我运行了,绝对正确。
如果知道行列数,就改改读入行了

var
i,j,n,m:longint
a:array[1..100,1..100] of longint
begin
n:=0
while not(eof) do begin
inc(n)
m:=0
while not eoln do begin
inc(m)
read(a[n,m])
end
readln
end
for i:=1 to n do
for j:=1 to m do
if a[i,j]<>0 then writeln(i, ,j, ,a[i,j])
end.

稀疏矩阵的应用

按b.data中三元组的次序进行转置。也就是说,按照矩阵M的列序进行转置。显然,为了找到M中的每一列的所有的非零元素,需要对a.data从第1行起整个扫描一遍。由于a.data是以M的行序来存放每一个非零元素的,因此,这样得到的顺序恰好是b.data应有的顺序。其具体算法描述如下:

#define MaxSize 100
#define ElemType int
typedef struct
{ int i,j ElemType v
}Mat
typedef struct
{ int m,n,t Mat data[MaxSize]
} Spmatrix
Spmatrix pa,*pb
void transmat(Spmatrix a,Spmatrix *b)
{ int p,q,col
b->m=a.n b->n=a.m b->t=a.t
if (a.t!=0)
{ q=0
for (col=1 col<=a.n col )
for (p=0 p
if(a.data
.j==col)
{ b->data[q].j=a.data
.i
b->data[q].i=a.data
.j
b->data[q].v=a.data
.v
q
}
}
}

稀疏矩阵运算的设计

#include#define m 6 /*定义原始矩阵行数*/ #define n 8 /*定义原始矩阵列数*/ #define max 50 /*转储稀疏矩阵的算法*/ void CreateMatrix(int A[m][n],int B[50]) { int i,j,k=0 for(i=0i

如何用spark做矩阵计算

我们是调用jblas来实现的。大矩阵和小矩阵的运算,将小矩阵广播到各个节点,对大矩阵每一行进行map,在节点用Jblas的函数计算向量和矩阵的乘积。大矩阵和大矩阵,将两个矩阵分块乘积,不过矩阵太大速度慢成狗了