gpt4 book ai didi

c# - 更改/访问矩阵元素的最佳/最快方法

转载 作者:太空宇宙 更新时间:2023-11-03 10:46:04 25 4
gpt4 key购买 nike

我是 C# 的新手,我对我们的数组、数组的数组、锯齿状数组、矩阵和其他东西有困难。它与 C++ 完全不同,因为我无法使用指针和其他东西获得对矩阵行的引用(除非我使用不安全的代码)。

无论如何,这就是问题所在:我有一个名为“Image”的结构/类,它包含 1024 列和 768 行。对于每一行/列,都有一个包含 3 个字节的“像素”结构/类。我想尽快获取/设置矩阵随机位置的像素。

假设我有一个 25 像素的矩阵。那是 5 行和 5 列,像这样:

A B C D E
F G H I J
K L M N O
P Q R S T
U V X W Y

我需要比较 M 与 H 和 R。然后 M 与 L 和 N。然后我需要“求和”G+H+I+L+M+N+Q+R+S。

我该怎么做?

可能性:1) 创建类似 pixel[5][5] 的东西(这是一个锯齿状的数组,对吧?),每当我尝试比较不同列上的元素时,它会很慢,对吧?2) 创建类似 pixel[25] 的东西,这不会那么容易编码/准备好,因为我需要做一些(简单的)数学运算,每一个我想要访问一个元素3) 创建类似 pixe[5,5] 的东西(这是一个多维数组,对吧?)...但我不知道如何将其转换为实际内存...如果它是一个 block 内存,比如 pixe[25],或者什么...

因为我打算对每个图像执行数万次此操作(“随机”求和/比较不同行/列中的元素)。我有 1000 多张图片。代码优化是必须的.​​.....遗憾的是我不确定我应该使用哪个结构/类。

TL;DR:在(固定大小)矩阵的随机位置获取/设置元素的最快方法和最简单(编码方式)方法是什么?

编辑:我不想将 C++ 与 C# 进行比较。我只是说我是 C# 的新手,我想找到使用 C# 完成此任务的最佳方法。请不要告诉我回到 C++。

最佳答案

我曾在 C# 中从事基于像素的图像处理。我发现您列表中的模式 #2 是最快的。为了速度,您必须忘记通过某种漂亮的抽象接口(interface)访问像素。像素处理例程必须明确处理图像的宽度和高度。这通常会导致糟糕的代码,但除非 Microsoft 改进 C# 编译器,否则我们将坚持使用这种方法。

如果您的 for 循环从数组的索引 0 开始,并在 array.Length - 1 结束,编译器将优化数组索引边界测试。这很好,但通常您在处理时必须一次使用多个像素。

关于c# - 更改/访问矩阵元素的最佳/最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23369479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com