作者HANASE (HA☆NA☆SE!)
看板Python
标题[问题] pandas 转 numpy.array
时间Fri Nov 13 14:30:35 2015
这是一份linearly separable的data
(取自林轩田老师的ML课程)
https://gist.github.com/anonymous/ca0ca0c4f61d14ae11a0
用下面的程式读取後丢给perceptron
可以确实把data分开
----------
import numpy as np
def readfile(filename):
with open(filename, 'r') as f:
X = []
Y = []
for line in f:
split = line.split()
X.append(list(map(float, split[:-1])))
Y.append(int(split[-1]))
return np.array(X), np.array(Y)
train = readfile('train.dat')
----------
但如果用pandas读取 会变成不可分
perceptron会卡住
----------
import pandas as pd
pd_train = pd.read_csv('train.dat', header=None,
delim_whitespace=True).as_matrix()
pd_train = pd_train[:, :-1], pd_train[:, -1]
----------
用np.array_equal後发现值确实不一样
而np.allclose说两边很接近
请问如果要使用pandas读取这种data
有什麽地方需要注意的呢?
谢谢
附上程式码
https://gist.github.com/anonymous/f64eb5dcc2f313e1474f
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.231.44.143
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1447396241.A.5BB.html
1F:→ Fungshui: pd.read_csv(..., dtype=np.float32) 浮点数的问题 11/13 22:53
加了dtype=np.float32就变成可分
np.array_equal比较还是False
另外用dtype=np.float64又变成不可分
2F:推 yogi: 为什麽不用np.loadtxt()呢? 直接读入存成numpy array 11/14 16:01
3F:推 yogi: 懒得开档案测试, 不过是否能把两个方法读入的资料array相减, 11/14 16:06
4F:→ yogi: 看看哪些地方有差异, 再对照原始data file看看呢? 11/14 16:06
原来有np.loadtxt()可以用
用np.array_equal跟第一个方法比较的结果是一样的
谢谢两位
※ 编辑: HANASE (36.228.185.23), 11/15/2015 03:27:09
5F:→ Fungshui: 我也是觉得奇怪, pd的parser不知怎麽处理原字串, 在比较 11/15 10:14
6F:→ Fungshui: 上有点误差(虽然很微小), 但也刚好让data变得不可分, 只 11/15 10:16
7F:→ Fungshui: 能说这组data太精密了, 连浮点误差都会变得无法收敛 11/15 10:18