如何处理System.IndexOutOfRangeException

我在调试代码时遇到了System.IndexOutOfRangeException错误。有人能帮我解决这个问题吗?请查看图片中异常发生的位置。程序成功读取了“Line Array”的第一行,但在读取第二行时发生了异常。当i=1且j=0时发生异常。
以下是代码:

(异常图片)(Line Array图片)

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Drawing;using System.Drawing.Imaging;namespace Handwriting.SVMs{    static class Features    {        /// <summary>        ///   从包含二进制0和1的图像表示的文本中提取图像。        /// </summary>        ///         public static Bitmap Extract(string text)        {            Bitmap bitmap = new Bitmap(32, 32, PixelFormat.Format32bppRgb);            string[] lines = text.Split(new String[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);            for (int i = 0; i < 32; i++)            {                for (int j = 0; j < 32; j++)                {                           if (lines[i][j] == '0')                        bitmap.SetPixel(j, i, Color.White);                    else bitmap.SetPixel(j, i, Color.Black);                }            }            return bitmap;        }        /// <summary>        ///   从图像中提取特征向量表示,将二进制图像“平展”成0和1的数组。        /// </summary>        ///         public static double[] Extract(Bitmap bmp)        {            double[] features = new double[32 * 32];            for (int i = 0; i < 32; i++)                for (int j = 0; j < 32; j++)                    features[i * 32 + j] = (bmp.GetPixel(j, i).R == 255) ? 0 : 1;            return features;        }        /// <summary>        ///   将包含0和1的特征向量转换回图像,每个像素在图像中表示。        /// </summary>        ///         public static Bitmap Export(double[] features)        {            Bitmap bitmap = new Bitmap(32, 32, PixelFormat.Format32bppRgb);            for (int i = 0; i < 32; i++)                for (int j = 0; j < 32; j++)                {                    double v = features[i * 32 + j];                    v = 255 - Math.Max(0, Math.Min(255, Math.Abs(v) * 255));                    bitmap.SetPixel(j, i, Color.FromArgb((int)v, (int)v, (int)v));                }            return bitmap;        }        public static double[] Preprocess(Bitmap bitmap)        {            double[] features = new double[64];            for (int m = 0; m < 8; m++)            {                for (int n = 0; n < 8; n++)                {                    int c = m * 8 + n;                    for (int i = m * 4; i < m * 4 + 4; i++)                    {                        for (int j = n * 4; j < n * 4 + 4; j++)                        {                            Color pixel = bitmap.GetPixel(j, i);                            if (pixel.R == 0x00) // 白色                                features[c] += 1;                        }                    }                }            }            return features;        }    }}

回答:

尝试替换

string[] lines = text.Split(new String[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

string[] lines = text.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries);

另外,您必须确保text包含至少32行非空行,每行有32个字符。如果更改Split方法无效,那么问题可能出在text变量上。

从您的描述来看,似乎没有lines[1];

所有行都被放置在lines[0];中 – 您可以在第二张图片中看到这一点

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注