问题描述
我是C语言的新手,希望能帮助您解决以下问题。 当使用matlab或python时,这是一个非常简单的问题,但是我似乎无法在C中找到一个与numpy具有类似功能的函数库或matlab的基本内置函数。
给出一个阈值,一个NxM大小的数组,其中填充了两倍大小的数据(“ ar ”)和一个较小的(k + 1)x(k + 1)“ 窗口”(子数组,k 我想到了以下实现: 例如以下4x5数组,阈值为30,k = 1窗口(2x2): 子数组元素的总和为35,该函数将返回索引:
行= 1且col = 1 对我来说,此实现使用4 for循环填充非常笨拙,并且不够优雅。但是我没有太多的C经验,再次感谢您的帮助和反馈
int N = 10;
int M = 20;
int sum = 0;
double arr[N][M];
int k = 10;
int threshold = 50;
int row,col,win_row,win_col;
for (row = 0; row < N - k + 1; row++) {
for (col = 0; row < M - k + 1; coL++) {
for (win_row = row; win_row < row + k + 1; win_row++) {
for (win_col = col; win_col < col + k + 1; win_coL++){
sum += arr[win_row][win_col];
}
}
if (sum >= threshold ) {
break;
else {
sum = 0;
}
}
}
}
int indx = {row,col};
return indx;
arr[4][5] = { {1,4},{ 0,10,8,0 },9,{ 1,1 },}
解决方法
通常,C在数组操作上不能给您太多帮助,因此,这看起来是一个不错的实现。我可能会将窗口上的循环移到一个单独的函数上以提高可读性,但在其他方面还是一样的。
话虽如此,它看起来像是一种操作,您可以在窗口较大的情况下使用求和的面积表来加快速度。