作者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://www.ptt.cc/bbs/Python/M.1447396241.A.5BB.html
→ Fungshui: pd.read_csv(..., dtype=np.float32) 浮點數的問題 11/13 22:53
加了dtype=np.float32就變成可分
np.array_equal比較還是False
另外用dtype=np.float64又變成不可分
推 yogi: 為什麼不用np.loadtxt()呢? 直接讀入存成numpy array 11/14 16:01
推 yogi: 懶得開檔案測試, 不過是否能把兩個方法讀入的資料array相減, 11/14 16:06
→ yogi: 看看哪些地方有差異, 再對照原始data file看看呢? 11/14 16:06
原來有np.loadtxt()可以用
用np.array_equal跟第一個方法比較的結果是一樣的
謝謝兩位
※ 編輯: HANASE (36.228.185.23), 11/15/2015 03:27:09
→ Fungshui: 我也是覺得奇怪, pd的parser不知怎麼處理原字串, 在比較 11/15 10:14
→ Fungshui: 上有點誤差(雖然很微小), 但也剛好讓data變得不可分, 只 11/15 10:16
→ Fungshui: 能說這組data太精密了, 連浮點誤差都會變得無法收敛 11/15 10:18