我是C语言的新手,希望能帮助您解决以下问题。当使用matlab或python时,这是一个非常简单的问题,但是我似乎无法在C中找到一个具有与numpy类似的功能的函数库或matlab的基本内置函数。
给定一个阈值,一个NxM大小的数组填充了两倍大小的数据(“ arr ”)和一个较小的(k + 1)x(k + 1)“ window ”(子数组,k <N,M),我们需要返回子数组的第一个索引,即其元素之和等于或大于阈值。索引是子数组在NxM数组中的起始位置。
我想到了以下实现:
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;
例如,对于以下4x5数组,阈值为30,ak = 1 window(2x2):
arr[4][5] = { {1, 0 , 0 , 4},
{ 0, 10, ,8 ,0 },
{ 0, 9, ,8 ,0 },
{ 1, 0, ,0 ,1 },
}
子数组元素的总和为35,该函数将返回索引:row = 1和col = 1
对我来说,此实现使用4 for循环填充非常笨拙,并且不够优雅。但是我没有太多的C经验,再次感谢您的帮助和反馈
您可以推荐一种更好的方法来解决此问题吗?
通常,C在数组操作方面不会给您太多帮助,因此,这看起来是一个不错的实现。为了提高可读性,我可能会将窗口上的循环移至一个单独的函数,但在其他方面相同。
话虽如此,这似乎是一种操作,您可以在窗口较大的情况下使用汇总面积表来加快处理速度。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句