如何为我的 AI 将文件格式化为多维 numpy 数组
How can I format a file to a multidimensional numpy array for my AI
我为我的 AI 存储了一个名为 data.txt
的训练集。
AI 应该得到 5 X
个输入,每个 运行 和一个 solution/answer,即数组 y
。
数组 X
应如下所示:
[[x1,x2,x3,x4,x5],[x1,x2....x5],....]
我用 2 * 5 个输入对其进行了测试,结果如下:
[2.21600000e+05 2.02000000e+03 2.43738600e+06 1.09990343e+01
9.11552347e-01 2.21600000e+05 2.02000000e+03 2.43738600e+06
1.09990343e+01 9.11552347e-01 1.00000000e+01 1.00000000e+00
5.72000000e+02 5.72000000e+01 1.00000000e+01]
我想要的是:
[[221600,2020,2437386,10.999034296028881,0.9115523465703971],
[10,1,572,57.2,10.0]]
答案数组y
很好。它是:[0.,0.]
代码:
import numpy
X=np.array([])
y=np.array([])
lineX=np.array([])
i=0
linenumber=0
with open('data.txt') as file:
for line in file:
dataline=line.rstrip()
dataline=float(dataline)
i+=1
linenumber+=1
if i != 6:
lineX=np.append(lineX,dataline)
else:
X=np.append(X,lineX,axis=0)
i=0
y=np.append(y,dataline)
print(X)
print(y)
和文件(原来有大约800行,所以我把它缩短了)
221600
2020
2437386
10.999034296028881
0.9115523465703971
0
10
1
572
57.2
10.0
0
文件的前五行是输入 x1-x5,第六行是 y(答案)等等。
我怎样才能让它工作?
为此我们需要两个步骤:
data = []
with open('data.txt') as file:
for line in file:
dataline=line.rstrip()
dataline=float(dataline)
data.append(dataline)
data= np.array(data)
首先我们将所有内容放入一个 numpy 数组中。我假设有更有效的方法来读取文件,即 pandas 将其读取为 csv,但对于 800 个无关紧要的值。
data = data.reshape(-1,6)
X = data[:,0:5]
y = data[:,5]
在第二步中,我们将数组拆分为完整样本,因此第 0-4 列是您的 X
值,第 5 列是您的 y
值
编辑,与浮点值相切:
整数在二进制中有很好的定义,即 1101 是 13。但是浮点数有一个问题,您需要在精度(如小数位)和 min/max 值之间进行权衡,这样您就不会经常发生缓冲区溢出.所以你有一个固定数量的位负责你的小数位和另一个固定数量的指数。您可以继续阅读 here.
记忆中的这个数字永远不变。您正在观察的是打印时作为字符串的表示。 Numpy 通常对浮点数使用与 format(x,'1.8e')
相同的科学记数法。如果您想以不同的方式打印它,请使用这些格式字符串来格式化它,但是您可以使用 format(x,'1.1f')
来为您提供带一个小数位的完整数字。
我为我的 AI 存储了一个名为 data.txt
的训练集。
AI 应该得到 5 X
个输入,每个 运行 和一个 solution/answer,即数组 y
。
数组 X
应如下所示:
[[x1,x2,x3,x4,x5],[x1,x2....x5],....]
我用 2 * 5 个输入对其进行了测试,结果如下:
[2.21600000e+05 2.02000000e+03 2.43738600e+06 1.09990343e+01
9.11552347e-01 2.21600000e+05 2.02000000e+03 2.43738600e+06
1.09990343e+01 9.11552347e-01 1.00000000e+01 1.00000000e+00
5.72000000e+02 5.72000000e+01 1.00000000e+01]
我想要的是:
[[221600,2020,2437386,10.999034296028881,0.9115523465703971],
[10,1,572,57.2,10.0]]
答案数组y
很好。它是:[0.,0.]
代码:
import numpy
X=np.array([])
y=np.array([])
lineX=np.array([])
i=0
linenumber=0
with open('data.txt') as file:
for line in file:
dataline=line.rstrip()
dataline=float(dataline)
i+=1
linenumber+=1
if i != 6:
lineX=np.append(lineX,dataline)
else:
X=np.append(X,lineX,axis=0)
i=0
y=np.append(y,dataline)
print(X)
print(y)
和文件(原来有大约800行,所以我把它缩短了)
221600
2020
2437386
10.999034296028881
0.9115523465703971
0
10
1
572
57.2
10.0
0
文件的前五行是输入 x1-x5,第六行是 y(答案)等等。
我怎样才能让它工作?
为此我们需要两个步骤:
data = []
with open('data.txt') as file:
for line in file:
dataline=line.rstrip()
dataline=float(dataline)
data.append(dataline)
data= np.array(data)
首先我们将所有内容放入一个 numpy 数组中。我假设有更有效的方法来读取文件,即 pandas 将其读取为 csv,但对于 800 个无关紧要的值。
data = data.reshape(-1,6)
X = data[:,0:5]
y = data[:,5]
在第二步中,我们将数组拆分为完整样本,因此第 0-4 列是您的 X
值,第 5 列是您的 y
值
编辑,与浮点值相切:
整数在二进制中有很好的定义,即 1101 是 13。但是浮点数有一个问题,您需要在精度(如小数位)和 min/max 值之间进行权衡,这样您就不会经常发生缓冲区溢出.所以你有一个固定数量的位负责你的小数位和另一个固定数量的指数。您可以继续阅读 here.
记忆中的这个数字永远不变。您正在观察的是打印时作为字符串的表示。 Numpy 通常对浮点数使用与 format(x,'1.8e')
相同的科学记数法。如果您想以不同的方式打印它,请使用这些格式字符串来格式化它,但是您可以使用 format(x,'1.1f')
来为您提供带一个小数位的完整数字。