帮助!!!大家好,我在网上找到了以下代码,用于将文本文件(带有一些额外的格式)转换为double t [] []。但是它声明字符串输入格式不正确,是否有人知道如何解决此问题?主要代码是深度学习神经网络,我想调试并运行,请帮助我愿意分享它的调试后的代码?请参阅下面的违规代码!
public static class DataParser
{
public static double[][] Parse(string filePath)
{
filePath=@"C:\Users\DRS\Desktop\rbm2\SimpleRBM-master\optdigits-tra.txt";
var x = File.ReadAllText(filePath);
x = x.Replace("\r\n", "");
var y = x.Split(" ".ToCharArray());
var t =
y. Select(
s =>
s.Substring(1).PadRight(1024, '0').Select(
n => double.Parse(n.ToString(CultureInfo.InvariantCulture))).ToArray()).ToArray();
return t;
}
}
答案 0 :(得分:1)
您在Select
上使用LINQ string
。当string
用作IEnumerable
时,您可以单独获得每个字符。
然后你使用ToString(InvariantCulture)
将字符转换为字符串,这是没用的。
最后,您尝试将这个单字符字符串解析为一个数字,当一个字符为-
或.
在ToString()
之前立即致电Parse
始终是代码气味。可能你的意思是基于行分割,最好使用输入文件上的ReadAllLines
方法完成。然后拆分每行内的空白。
return File.ReadAllLines(filePath)
.Select(x => x.Split(' ').Select(double.Parse).ToArray()).ToArray();
但是,由于Maxwell在评论中链接了您的输入数据,我可以看到您实际上并没有尝试解析双打。试试这个:
return File.ReadAllLines(filePath).Where(x => x.Length > 10)
.Select(x => x.ToCharArray().Select(x => x-'0').ToArray()).ToArray();
它将是一个int[][]
,反映出你的数字是二进制的,没有任何分数。另请注意,我只是丢弃关于数据实际代表的数字的注释。你可能想要的是一个更好的解析器,它实际上返回一个(int[][]
,char
)对的列表,它们具有每个训练输入的位图数据和注释。