[問題] pandas 轉 numpy.array

看板Python作者 (HA☆NA☆SE!)時間10年前 (2015/11/13 14:30), 10年前編輯推噓2(205)
留言7則, 2人參與, 最新討論串1/1
這是一份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

11/13 22:53, , 1F
pd.read_csv(..., dtype=np.float32) 浮點數的問題
11/13 22:53, 1F
加了dtype=np.float32就變成可分 np.array_equal比較還是False 另外用dtype=np.float64又變成不可分

11/14 16:01, , 2F
為什麼不用np.loadtxt()呢? 直接讀入存成numpy array
11/14 16:01, 2F

11/14 16:06, , 3F
懶得開檔案測試, 不過是否能把兩個方法讀入的資料array相減,
11/14 16:06, 3F

11/14 16:06, , 4F
看看哪些地方有差異, 再對照原始data file看看呢?
11/14 16:06, 4F
原來有np.loadtxt()可以用 用np.array_equal跟第一個方法比較的結果是一樣的 謝謝兩位 ※ 編輯: HANASE (36.228.185.23), 11/15/2015 03:27:09

11/15 10:14, , 5F
我也是覺得奇怪, pd的parser不知怎麼處理原字串, 在比較
11/15 10:14, 5F

11/15 10:16, , 6F
上有點誤差(雖然很微小), 但也剛好讓data變得不可分, 只
11/15 10:16, 6F

11/15 10:18, , 7F
能說這組data太精密了, 連浮點誤差都會變得無法收敛
11/15 10:18, 7F
文章代碼(AID): #1MHOEHMx (Python)
文章代碼(AID): #1MHOEHMx (Python)