C#中的滑动窗口算法

2023-12-05

我正在尝试在 C# 3.0 中的二维数组上实现简单的滑动窗口算法, 我发现this非常有用,但它只涉及一维数组。

The post还包括算法的代码,我完全无法将它用于我的场景......任何人都可以建议我如何继续吗?

设想:

http://parasu516.googlepages.com/matrix.jpg
(source: googlepages.com)

上面的图像是 10X10 矩阵,需要使用任何算法得到 3X3 矩阵(滑动窗口会很棒)。红色矩形是第一组,绿色矩形是第二组。它会一直持续到所有行的末尾

PS:我用谷歌搜索了该算法,但没有运气:(


天真的实现:

private static IEnumerable<T[,]> GetWindows<T>(
    T[,] array,
    int windowWidth,
    int windowHeight)
{
    for (var y = 0; y < array.GetLength(1) - windowHeight + 1; y++)
    {
        for (var x = 0; x < array.GetLength(0) - windowWidth + 1; x++)
        {
            var slice = new T[windowWidth, windowHeight];
            CopyArray(array, x, y, slice, 0, 0, windowWidth, windowHeight);
            yield return slice;
        }
    }
}

在二维数组之间复制的辅助方法:

private static void CopyArray<T>(
    T[,] src, int srcX, int srcY,
    T[,] dst, int dstX, int dstY,
    int width, int height)
{
    for (var x = 0; x < width; x++)
    {
        for (var y = 0; y < height; y++)
        {
            dst[dstX + x, dstY + y] = src[srcX + x, srcY + y];
        }
    }
}

测试主要:

private static void Main(string[] args)
{
    var array = new string[5, 5];
    for (var y = 0; y < array.GetLength(1); y++)
    {
        for (var x = 0; x < array.GetLength(0); x++)
        {
            array[x, y] = string.Format("({0}|{1})", x, y);
        }
    }
    foreach (var window in GetWindows(array, 3, 3))
    {
        ShowArray(window);
    }
    Console.ReadLine();
}

private static void ShowArray<T>(T[,] array)
{
    for (var x = 0; x < array.GetLength(0); x++)
    {
        for (var y = 0; y < array.GetLength(1); y++)
        {
            Console.Write("    {0}", array[x, y]);
        }
        Console.WriteLine();
    }
    Console.WriteLine();
}

Output:

(0|0)    (0|1)    (0|2)
(1|0)    (1|1)    (1|2)
(2|0)    (2|1)    (2|2)

(1|0)    (1|1)    (1|2)
(2|0)    (2|1)    (2|2)
(3|0)    (3|1)    (3|2)

(2|0)    (2|1)    (2|2)
(3|0)    (3|1)    (3|2)
(4|0)    (4|1)    (4|2)

(0|1)    (0|2)    (0|3)
(1|1)    (1|2)    (1|3)
(2|1)    (2|2)    (2|3)

(1|1)    (1|2)    (1|3)
(2|1)    (2|2)    (2|3)
(3|1)    (3|2)    (3|3)

(2|1)    (2|2)    (2|3)
(3|1)    (3|2)    (3|3)
(4|1)    (4|2)    (4|3)

(0|2)    (0|3)    (0|4)
(1|2)    (1|3)    (1|4)
(2|2)    (2|3)    (2|4)

(1|2)    (1|3)    (1|4)
(2|2)    (2|3)    (2|4)
(3|2)    (3|3)    (3|4)

(2|2)    (2|3)    (2|4)
(3|2)    (3|3)    (3|4)
(4|2)    (4|3)    (4|4)

现在您所要做的就是应用该博客文章中所示的相同技术:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#中的滑动窗口算法 的相关文章

随机推荐

  • 在 cygwin/gfortran 下编译 Fortran 程序给出“对‘_WinMain@16’的未定义引用”

    在 Cygwin 终端中我输入 gfortran o threed euler fluxes v3 exe threed euler fluxes v3 f90 我得到编译器错误 usr lib gcc i686 pc cygwin 4 5
  • 尝试使图像在点击时触发功能 - p5.js

    我正在做一个带有交互式画布的艺术课项目 我的目标是让小动物在被点击时发出声音并 移动 我尝试在不创建类的情况下执行此操作 因为由于某种原因我无法在类中使用图像 我正在尝试尽可能轻松地做到这一点 我所说的 移动 是指我试图让背景图像出现在它们
  • 如何在 cy.log() 中打印对象?

    Use case 这是一个用 JS 编码的 Cypress E2E 测试 我正在尝试比较预生产和生产站点地图 URL 内容 以找到差异 我有两个数据集 夹具 一个用于生产 另一个用于测试环境 代码片段 let compareUrlsBetw
  • YouTube API v3 返回截断的观看历史记录

    我可以通过 YouTube v3 数据 API 访问我的观看历史记录 但它仅返回我最近的 30 个视频 尽管当我在 YouTube com 上查看观看历史记录时我会看到更多 然后当我看另一个视频时 它返回31 当我看另一个视频时 它返回32
  • java 版本仍然显示为 1.4 linux

    java version 仍然返回旧的 java 版本 我有红帽Linux 我在以下路径中安装了jdk 1 5并更新了bask配置文件并做了一个源但java版本仍然显示1 4 JAVA HOME usr local jdk jdk1 5 0
  • Google Analytics API V4:includeEmptyRows:“true”,不起作用

    我正在将我的应用程序迁移到 V4 问题是您需要将 includeEmptyRows 设置为 TRUE 这就是我刚刚所做的 然而 空行根本没有填充 function queryReports gapi client request path
  • 使用 ActionMailer 发送带有内嵌图像的 HTML 电子邮件

    我有一个像这样的简单 ActionMailer 类 class MyMailer lt ActionMailer Base def mail from to cc bcc subject message sent at Time now s
  • ImageReader 导致相机滞后

    我面临的问题是 除了用于显示相机输出的 SurfaceView 之外 我还使用 ImageReader 我已经添加了 SurfaceView 本身和 ImageReader 的表面 如下所示 并添加了 ImageReader 侦听器以便接收
  • 具有/不同列数的 vec2mat

    参考使用不同的起始 结束元素数重塑行 Divakar 提出了一个很好的解决方案 但是 如果列数并不总是相同怎么办 样本运行 gt gt A ans 4 9 8 9 6 1 8 9 7 7 7 4 6 2 7 1 gt gt out out
  • 这个执行切入点表达式是如何工作的?

    我遇到了一个answer来自 kriegaex 我无法理解 我试图理解的切入点表达式如下 Around execution MyAnnotation execution MyAnnotation 据我了解 这个表达式将建议任何带有注释的类或
  • 如何使用批处理文件屏蔽输入而不需要额外的文件

    我想要批处理文件用 屏蔽输入而不需要额外的文件 例如 http pastebin com 2c4EtG4g 这段代码运行成功 但是当我写这封信时速度非常慢 任何人都可以给我 代码速度快并且没有额外的文件 或者编辑链接中的代码以加快速度 这符
  • 针对 BlackBerry 上的多种屏幕尺寸进行开发

    Android 和 iOS 具有 密度独立像素 的概念 因此您的布局在不同密度和屏幕尺寸的设备上看起来相同 到目前为止 我已经编写了使用像素手动间隔元素的代码 即我希望此按钮距屏幕左侧 10 个像素 这在曲线上非常棒 但是当我将其加载到粗体
  • 将复杂结构编组到 C#

    我仍在努力将一个相当复杂的结构从 C 编组到 C C 中的结构体如下 typedef struct DWORD Flags DWORD TimeCode DWORD NodeMoving Matrix NodeRots NUM GYROS
  • python基础级别生成器和列表问题[重复]

    这个问题在这里已经有答案了 my nums i i for i in 1 2 3 4 5 for k in my nums print k GG list my nums print GG 它打印 1 4 9 16 25 Process f
  • 强制浏览器在显示页面之前加载 CSS

    我已经制作了我的网站的移动版本 然而 在加载页面时 网站首先会在未应用 CSS 的情况下显示 一秒钟后 最多 它会应用 CSS 并正确呈现 此行为在所有浏览器 包括移动浏览器 中都是一致的 你知道我如何强制浏览器首先加载CSS 它的尺寸真的
  • 为什么我必须为 React 组件类中定义的方法添加 .bind(this) ,而不是在常规 ES6 类中定义方法

    让我困惑的是为什么当我定义一个 React 组件类时 包含在this对象在定义的方法中未定义 this在类中的生命周期方法中可用 除非我使用 bind this 或者使用箭头函数定义方法 例如下面的代码this state将是未定义的ren
  • 从具有不同高度的表格行中提取pdf文本(java使用pdfbox库)

    黑色形状是需要提取的文本 到目前为止 我已经从列中提取了文本 但是是手动提取的 因为只有 5 个 对区域使用 Rectangle 类 我的问题是 有没有办法对行执行此操作 因为矩形的大小 高度 不同 并且手动对 50 多行执行此操作将是一种
  • Bootstrap 工具提示 HTML, 锚标记上带有很棒的字体图标,但焦点不起作用

    我有以下 HTML 它按预期工作 当悬停到 符号时 会出现工具提示 但是因为其中一个在工具提示内有链接 所以我希望它表现得像 焦点 并且同时也 悬停 因此当我悬停其中包含链接的工具提示时 它仍然像 悬停 一样 当我没有悬停 HTML 时 工
  • 将 DateInterval 格式设置为 ISO8601

    我目前正在开发一个 php 项目 需要将 DateInterval 格式化为 ISO8601 类似这样 P5D 此格式可用于创建 DateTime 和 DateInterval 对象 但我无法找到将 DateInterval 格式化为此格式
  • C#中的滑动窗口算法

    我正在尝试在 C 3 0 中的二维数组上实现简单的滑动窗口算法 我发现this非常有用 但它只涉及一维数组 The post还包括算法的代码 我完全无法将它用于我的场景 任何人都可以建议我如何继续吗 设想 source googlepage