2017-05-30 72 views
1

我有CSV文件作为输入:用文字int和浮动列到ndarray

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

谢谢
------------------编辑----------------- -------
问题,为什么我问的是,我将这个二维数组作为输入到我的二进制分类网络中,当所有值都是int且形式为[[]]时,它收敛于值,但是在目前情况下,它的混合输出是0.或1.错误学习非常高。 参观https://github.com/naitikshukla/MachineLearning/blob/master/neural/demo_ann.py! 为完整的代码

在输入空间,如果我从标线69-88我的电流输入和取消标记,然后输出将是0和1。

,所以我想将其更改为正确的数据类型,看看是否有将解决我的问题。

下面有非常好的解释,这是不可能的,我会看到任何解决方法,看看我是否可以使用当前输入的火车和预测。

+0

为什么你需要这种形式?我认为'(...)'是你的对象数组的结果。使用这种格式更改下一个命令可能会更容易。 – Nyps

+0

我想用Backpropagation来构建单层神经网络的代码,所以这是假设为我开始的一步,下一步我正在做什么显然是拆分,然后调用火车和预测, 'train,test = train_test_split( scale_inp,test_size = 0.25)\t \t#将数据分割为测试和训练,然后是train_X = np.array(train [:,0:8])。 如果我能够做到这些,我想在火车点产品会再次为我造成问题。 –

+1

在网络案例中,整数与浮点数有什么关系?在编辑中添加很多附加内容而不是评论。在那里阅读比较容易。对于培训/测试拆分,是按列还是按行?整数v是否浮动很重要? – hpaulj

回答

1

创建像[[col1,col2,...,coln]]这样的包含不同类型值的numpy数组是不可能的。

numpy array is homogeneous。换句话说,numpy数组只包含一个单一类型的值。

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') 

上面这行代码创建了一个浮点数的2D数组,它的形状是4x9。

In [36]: r = np.loadtxt(sio, delimiter=",", skiprows=0, dtype=[('f0',int),('f1' 
    ...: ,int),('f2',int),('f3',int),('f4',int),('f5',float),('f6',float),('f7' 
    ...: ,int),('f8',int)]) 
In [38]: r.shape 
Out[38]: (4,) 
In [45]: r.dtype 
Out[45]: dtype([('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<i4'), ('f4', '<i4'), ('f5', '<f8'), ('f6', '<f8'), ('f7', '<i4'), ('f8', '<i4')]) 

此行代码创建一个1-D structured array。该数组的每个元素都是一个包含9个项目的结构。它仍然是同质的。

0

在第一种情况下,你会得到一个2d浮点数组。第二种是一个带有结构化dtype的1d数组,包含了整数和浮点数。第一列中的列现在被命名为字段。结构化记录用()代替[]标记。

这两个表格都是有效的和有用的。这取决于你需要做什么。

当某些字段是字符串或其他不符合整数/浮点模式的字段时,结构化表单更有用。通常你可以将整数作为浮点数工作而不会丢失任何功能。

第一种情况到底是什么错误?哪一个最重要 - 命名的列或列的范围(例如0:5,5:8)?