C++之N阶矩阵相乘优化 摆脱嵌套循环


#include <iostream>
#include <malloc.h>
using namespace std;
float *a_array[99999],*b_array[99999];
 float**  native_mm(int size,  float *a,  float *b) 
{

    for(int index=0;index<size;index++){
          a_array[index]=a+index*size;
    }

    for(int index=0;index<size;index++){
          b_array[index]=b+index;
    }

    float *temp=new float[size];
    float *p=a_array[0];
    int temp_index=0;
    int flat;
    int count=0;
    for(int index=0,flat=1;flat<=(size*size*size);index++,flat++){
            if(index==3){
               index=0;
             p=a_array[flat/(size*size)];
             temp_index++;
             if(temp_index==3){
             //    a_array[0]=temp;
                 temp_index=0;
                 temp=new float[size];
             }
          }
          temp[temp_index]+=*p*(*(b_array[temp_index]+index*size));
         if(flat%(size*size)==0){
             a_array[flat/(size*size)-1]=temp;
                  
         }
          p++;
    }

  return a_array;
}


int main()
{
    float *A, *B;

 int N=3;
    //随机数种子
    //srand48(100);

      A = (float *)malloc(N*N*sizeof(float));
    B = (float *)malloc(N*N*sizeof(float));
    for (int i=0; i<N*N; ++i) {
        A[i] = i;
        B[i] = i;
    }
 cout<<"打印原来的矩阵" <<endl;
 for(int index=0;index<N;index++){
     for(int n_index=0;n_index<N;n_index++){
         if(n_index==N-1){
             cout<<*(A+index*N+n_index)<<"|"<<endl;
         }else if(n_index==0){
         cout<<"|"<<*(A+index*N+n_index)<<",";    
         }else{
            cout<<*(A+index*N+n_index)<<",";
         }
    
     } 
 }
 

float **a=native_mm(N, B, A);


cout<<"结果矩阵"<<endl;
  for(int index=0;index<N;index++){
     for(int n_index=0;n_index<N;n_index++){
         if(n_index==N-1){
             cout<<*(a[index]+n_index)<<"|"<<endl;
         }else if(n_index==0){
              cout<<"|"<<*(a[index]+n_index)<<",";    
         }else{
            cout<<*(a[index]+n_index)<<",";
         }
     } 
 }


    return 0;

}

欢迎加群:854228077。
帮助更多java程序员提升技术!资料多,大佬多!

发布了28 篇原创文章 · 获赞 16 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/sunboylife/article/details/103361812