Можно ли этот код Java транслировать в код Clojure, который работает так же быстро или почти так же быстро?
Я ' Мне удалось получить более простые функции, такие как добавление двух массивов для работы на разумных скоростях с подсказкой типов, но я не мог заставить Clojure делать то, что делают нижеприведенные функции, за разумное время, используя либо взаимодействие Java, либо матрицы Incanter и с использованием функциональных или императивных стилей.
Я что-то упускаю по поводу подсказок типов или лучше всего делать такие вещи на Java?
static double[][] grad2_stencil= { {0,0,-1,0,0},
{0,0,16,0,0},
{-1,16,-60,16,-1},
{0,0,16,0,0},
{0,0,-1,0,0} };
public static double grad2(double[][] array, int x, int y){
double temp=0;
int L=array.length;
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
temp+=array[((x+i-2)%L+L)%L][((y+j-2)%L+L)%L]*grad2_stencil[i][j];
}
}
return temp/12.0;
}
public static double[][] grad2_field(double[][] arr){
int L=arr.length;
double[][] result=new double[L][L];
for(int i=0; i<L; i++){
for(int j=0; j<L; j++){
result[i][j]=grad2(arr, i, j);
}
}
return result;
}