LINUX.ORG.RU

Функция на питоне


0

0

Как такую функцию написать на Python

#include <stdio.h> #include <stdlib.h> #include <time.h>

int main(int argc, char* argv[]) { double *A=NULL; double *B=NULL; double *C=NULL; double *times=NULL; int i,j,k,N,n,m,p,r,r0,rn,dr; clock_t start,end;

r0=50; rn=900; dr=10; times=(double *)malloc(((rn-r0)/dr+1)*sizeof(double)); for (r=r0;r<=rn;r+=dr) { N=r; n=N; m=N; p=N; A=(double *)malloc(n*m*sizeof(double)); B=(double *)malloc(m*p*sizeof(double)); C=(double *)malloc(n*p*sizeof(double)); start=clock(); for (i=0;i<n;i++) for (j=0;j<m;j++) A[i*m+j]=rand(); for (i=0;i<m;i++) for (j=0;j<p;j++) B[i*p+j]=rand(); for (i=0;i<n;i++) for (j=0;j<p;j++) { C[i*p+j]=0; for (k=0;k<m;k++) C[i*p+j]+=A[i*m+k]*B[k*p+j]; }

end=clock(); times[(r-r0)/dr]=(end-start)/(double)CLOCKS_PER_SEC; /* printf("%d %f\n",r,(end-start)/(double)CLOCKS_PER_SEC); */ free(C); free(B); free(A); } for (r=r0;r<=rn;r+=dr) { printf("%d %f\n",r,times[(r-r0)/dr]); } free (times); return 0; }

anonymous

Написать её не сложно, смотри в треде про java,c++ и python (я там привёл код и время его выполнения). Сложнее её оптимизировать так, чтобы она работала соизмеримо по-скорости с аналогом на Си.

sigill
()

Произведение матриц, насколько я понимаю?

Можно переписать её на Питон "в лоб" (или почти в лоб): код будет короче за счёт отсутствия malloc и free и наличия списковых включений, но выполняться будет существенно дольше -- Питон не предназначен для таких задач.

Можно взять готовый модуль, например Numeric, где этот алгоритм уже реализован на C, и вызвать нужную функцию.

DKorolkov
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.