在元素大于阈值的2D数组中查找子2D数组的索引

潜水

我是C语言的新手,希望能帮助您解决以下问题。当使用matlab或python时,这是一个非常简单的问题,但是我似乎无法在C中找到一个具有与numpy类似的功能的函数库或matlab的基本内置函数。

给定一个阈值,一个NxM大小的数组填充了两倍大小的数据(“ arr ”)和一个较小的(k + 1)x(k + 1)“ window ”(子数组,k <N,M),我们需要返回子数组的第一个索引,即其元素之和等于或大于阈值。索引是子数组在NxM数组中的起始位置。

我想到了以下实现:

  1. arr上运行两个for循环,直到到达row-win和col-win。
  2. 对于每一行和col值,在停止条件等于窗口大小的情况下再运行2个for循环。
  3. 将整个窗口中的值相加,完成后检查sum> = threshold
  4. 如果是这样,则将row和col存储在数组中,中断循环并返回数组
    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经验,再次感谢您的帮助和反馈

您可以推荐一种更好的方法来解决此问题吗?

Laserallan

通常,C在数组操作方面不会给您太多帮助,因此,这看起来是一个不错的实现。为了提高可读性,我可能会将窗口上的循环移至一个单独的函数,但在其他方面相同。

话虽如此,这似乎是一种操作,您可以在窗口较大的情况下使用汇总面积表来加快处理速度。

https://en.wikipedia.org/wiki/Summed-area_table

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

快速访问2D数组中的相同索引元素

来自分类Dev

基于索引数组从2D数组中提取元素

来自分类Dev

比较2D数组中的元素

来自分类Dev

比较2D数组中的元素

来自分类Dev

从2D数组中删除元素

来自分类Dev

在3D数组中查找2D数组

来自分类Dev

通过索引检索2D数组元素的Python方法

来自分类Dev

无法创建for循环以在2D数组中查找数组的元素

来自分类Dev

在更大的2D数组中查找2D数组

来自分类Dev

制作2D子元素数组

来自分类Dev

如何使用numpy在现有2D数组中添加2D子数组?

来自分类Dev

在2D数组上查找排列

来自分类Dev

如何查找在另一个2d数组中出现的2d numpy数组的索引

来自分类Dev

在2D Javascript数组中搜索值索引

来自分类Dev

在2D数组中交换多个索引

来自分类Dev

numpy查找2D数组中的出现次数

来自分类Dev

在2D数组列中查找重复值

来自分类Dev

在python中的2D数组中计数并查找模式

来自分类Dev

在2D char数组中查找行数

来自分类Dev

在Java中的2D数组上查找值的位置

来自分类Dev

在2D数组中查找平均值

来自分类Dev

numpy查找2D数组中的出现次数

来自分类Dev

numpy:在2d数组中查找边界框

来自分类Dev

如何使用C在2D数组中查找连续元素

来自分类Dev

尝试在单个2D数组中的行之间查找公共元素

来自分类Dev

关于2D数组元素的参考

来自分类Dev

在2D数组中移动元素

来自分类Dev

在2D数组中移动元素

来自分类Dev

在Java中删除2d数组中的空元素