我有csv文件作为输入:
6,148,72,35,0,33.6,0.627,50,1
1,85,66,29,0,26.6,0.351,31,0
8,183,64,0,0,23.3,0.672,32,1
1,89,66,23,94,28.1,0.167,21,0
它有int和float的混合。 当我尝试使用“numpy.loadtext”导入文件时,我得到的是2d数组,每列都是浮点数。
r = np.loadtxt(open("text.csv", "rb"), delimiter=",", skiprows=0)
我收到输出,如:
array([[ 6. , 148. , 72. , ..., 0.627, 50. , 1. ],
[ 1. , 85. , 66. , ..., 0.351, 31. , 0. ],
[ 8. , 183. , 64. , ..., 0.672, 32. , 1. ],
...,
[ 5. , 121. , 72. , ..., 0.245, 30. , 0. ],
[ 1. , 126. , 60. , ..., 0.349, 47. , 1. ],
[ 1. , 93. , 70. , ..., 0.315, 23. , 0. ]])
这是完美的2d数组,列表中的每一行而不是元组。 但是当查看数据类型时,每个列都被视为float,这是不正确的。
我要问的是有什么方法我可以输出如下:
期望的输出
array([[ 6 , 148 , 72 , ..., 0.627, 50 , 1 ],
[ 1 , 85 , 66 , ..., 0.351, 31 , 0 ],
[ 8 , 183 , 64 , ..., 0.672, 32 , 1 ],
...,
[ 5 , 121 , 72 , ..., 0.245, 30 , 0 ],
[ 1 , 126 , 60 , ..., 0.349, 47 , 1 ],
[ 1 , 93 , 70 , ..., 0.315, 23 , 0 ]])
我确实尝试过这种方法:
r = np.loadtxt(open("F:/idm/compressed/ANN-CI1/Diabetes.csv", "rb"), delimiter=",", skiprows=0, dtype=[('f0',int),('f1',int),('f2',int),('f3',int),('f4',int),('f5',float),('f6',float),('f7',int),('f8',int)])
输出
array([( 6, 148, 72, 35, 0, 33.6, 0.627, 50, 1),
( 1, 85, 66, 29, 0, 26.6, 0.351, 31, 0),
( 8, 183, 64, 0, 0, 23.3, 0.672, 32, 1),
( 1, 89, 66, 23, 94, 28.1, 0.167, 21, 0),
...,
( 1, 126, 60, 0, 0, 30.1, 0.349, 47, 1),
( 1, 93, 70, 31, 0, 30.4, 0.315, 23, 0)],
dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<i4'), ('f4','<i4'), ('f5', '<f8'), ('f6', '<f8'), ('f7', '<i4'), ('f8', '<i4')])
在这里你可以看到dtype解决问题,但现在它不是我需要的正确形式,
[[col1,col2,...,coln],]代替[(col1,col2,...,coln),] ndarray
由于
的 ------------------ EDIT ------------------------
问题为什么我要问的是我将这个2d数组作为输入到我的二进制分类网络,当所有值都是int并且在[[]]形状时它会收敛到值,但在当前情况下它的混合输出是0或者1.具有非常高的错误学习。
访问https://github.com/naitikshukla/MachineLearning/blob/master/neural/demo_ann.py!
完整代码
在输入空间中,如果我标记当前输入并从第69-88行取消标记,则输出将为0和1。
所以我想将其更改为正确的数据类型,看看是否能解决我的问题。
下面有一个非常好的解释,这是不可能的,我会看到任何解决方法,看看我是否可以使用当前输入的火车和预测。
答案 0 :(得分:1)
创建像[[col1,col2,...,coln],]这样包含不同类型值的numpy数组是不可能的。
numpy数组同质。换句话说,numpy数组只包含一种类型的值。
root->right
上面的这一行创建了一个浮动的2D数组,它的形状是4x9。
In [32]: sio = StringIO('''6,148,72,35,0,33.6,0.627,50,1
...: 1,85,66,29,0,26.6,0.351,31,0
...: 8,183,64,0,0,23.3,0.672,32,1
...: 1,89,66,23,94,28.1,0.167,21,0''')
In [33]: r = np.loadtxt(sio, delimiter=",", skiprows=0)
In [34]: r.shape
Out[34]: (4, 9)
In [41]: r.dtype
Out[41]: dtype('float64')
此行代码创建1-D structured array。此数组的每个元素都是包含9个项目的结构。它仍然是同质的。
答案 1 :(得分:0)
在第一种情况下,你得到一个2d浮点数组。在第二个,一个带有结构化dtype的1d数组,一个int和float的混合。第一列中的列现在命名为字段的位置。结构化记录标有()而不是[]。
这两种形式都是有效且有用的。这取决于你需要做什么。
当某些字段是字符串或其他不适合整数/浮点模式的字段时,结构化表单更有用。通常,您可以将整数作为浮点数使用而不会丢失任何功能。
第一种情况究竟出了什么问题,全部浮动?哪个是最重要的 - 命名列或列范围(例如0:5,5:8)?