1、處理包含數據的文件
最近利用Python讀取txt文件時遇到了一個小問題,就是在計算兩個np.narray()類型的數組時,出現了以下錯誤:
TypeError: ufunc 'subtract' did not contain a loop with signature matching types dtype('<U3') dtype('<U3') dtype('<U3')作為一個Python新手,遇到這個問題后花費了挺多時間,在網上找了許多大神們寫的例子,最后終于解決了。
總結如下:
(1)出現此問題的原因是:目的是想計算兩個數組間的差值,但數組中的元素不是數據類型(float或int等),而是str類型的。
(2)解決方法:在為空數組添加數據過程中,將每個數據強制轉化為float型。
如將“character.append(dataSet[i][:-1])”修改為“ character.append([float(tk) for tk in dataSet[i][:-1]])”
現將利用Python讀取txt文件的過程總結如下:
python版本為python3.6
(1)函數定義,存放于Function.py文件中:
from numpy import *import random#讀取數據函數,返回list類型的訓練數據集和測試數據集def loadData(fileName): trainingData=[] testData=[] with open(fileName) as txtData: lines=txtData.readlines() for line in lines: lineData=line.strip().split(',') #去除空白和逗號“,” if random.random()<0.7: #數據集分割比例 trainingData.append(lineData) #訓練數據集 else: testData.append(lineData) #測試數據集 return trainingData,testData#輸入數據為list類型,分割數據集,分割為特征和標簽兩部分,返回數據為np.narray類型def splitData(dataSet): character=[] label=[] for i in range(len(dataSet)): character.append([float(tk) for tk in dataSet[i][:-1]]) label.append(dataSet[i][-1]) return array(character),array(label)(2)實現兩個數組間的減法,存放于main.py文件中:
#__author__=='qustl_000'#-*- coding: utf-8 -*-import numpy as npimport FunctionfileName="1.txt"trainingData,testData=Function.loadData(fileName)trainingCharacter,trainingLabel=Function.splitData(trainingData)testCharacter,testLabel=Function.splitData(testData)diff1=np.tile(testCharacter[0],(len(trainingCharacter),1))-trainingCharacterprint('測試數據集的一條數據,擴充到與訓練數據集同維:')print(np.tile(testCharacter[0],(len(trainingCharacter),1)))print('訓練數據集:')print(trainingCharacter)print('作差后的結果:')print(diff1)(3)運行結果:
測試數據集的一條數據,擴充到與訓練數據集同維:[[ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ] [ 1.5 60. ]]訓練數據集:[[ 1.5 40. ] [ 1.5 50. ] [ 1.6 40. ] [ 1.6 50. ] [ 1.6 60. ] [ 1.6 70. ] [ 1.7 60. ] [ 1.7 70. ] [ 1.7 80. ] [ 1.8 60. ] [ 1.8 80. ] [ 1.8 90. ] [ 1.9 90. ]]作差后的結果:[[ 0. 20. ] [ 0. 10. ] [ -0.1 20. ] [ -0.1 10. ] [ -0.1 0. ] [ -0.1 -10. ] [ -0.2 0. ] [ -0.2 -10. ] [ -0.2 -20. ] [ -0.3 0. ] [ -0.3 -20. ] [ -0.3 -30. ] [ -0.4 -30. ]]
新聞熱點
疑難解答