Homework1 for machine learning Li

今天開始把第一次編程練習(xí)了。代碼及運(yùn)行結(jié)果參見HW0-question1+2。
作業(yè)如下:

Question 1 矩陣運(yùn)算

  • 讀取 matrixA.txt 和 matrixB.txt 矩陣
  • 進(jìn)行矩陣乘法 - matrixA * matrixB酸纲, 將得到的矩陣數(shù)值,由小到大排序後輸出至ans_one.txt <\blockquote>

Question 2 基本圖片資料操作

  • 讀取 lena.png 與 lena_modified.png
  • 使用後者異於前者的部分產(chǎn)生相同格式的新圖檔 ans_two.png

準(zhǔn)備工作

jupyter昨天配置好了搔啊,想到自己可能更習(xí)慣pycharm寫程序就配置一下憔杨。開始想應(yīng)該比較簡單,setting設(shè)置一下就行淤毛,沒想到出現(xiàn)了 "Environment location diretory is not empty "今缚,當(dāng)時(shí)沒想明白問題在哪里,看到下面有一個(gè) "Existing environment ",設(shè)置到虛擬環(huán)境DeepLearnningWu仍提示非空低淡,突然想到應(yīng)該選到編輯器也就是python版本而不是文件夾姓言,果然里面有兩個(gè)python.exe,選擇了一個(gè)之后環(huán)境配置完成蔗蹋。

編程過程

問題一的解決

知識(shí)儲(chǔ)備

問題一首先要解決的是python文件的讀取何荚,參考書如下,本書chap8猪杭。
[1] <python 編程快速上手——讓繁瑣工作自動(dòng)化>餐塘,Ai Sweigart。
以下為學(xué)習(xí)過程:

  1. windows下文件路徑用到斜杠 " \ "表示胁孙,因此路徑里面會(huì)出現(xiàn)兩個(gè)到斜杠唠倦,第一個(gè)用來轉(zhuǎn)義称鳞。
  2. 創(chuàng)建文件名稱的字符串用命令:
import os
os.path.join()

例如:

import os
os.path.join('usr','bin','spam')

輸出結(jié)果為: 'usr\bin\spam'

擴(kuò)展應(yīng)用:將一個(gè)文件名列表中的名稱,添加到文件夾名稱的末尾稠鼻。

myFiles = ['accounts.txt', 'details.csv', 'invite.docx']
for filename in myFiles:
    print(os.path.join('c:\\Users\\asweigart', filename))

顯示結(jié)果:
c:\Users\asweigart\accounts.txt
c:\Users\asweigart\details.csv
c:\Users\asweigart\invite.docx

  1. 顯示當(dāng)前工作目錄:
os.getcwd()

改變當(dāng)前工作目錄:

os.chdir()

例子:

os.getcwd()
os.chdir('C:\\daka\\machine-learning-Li\\NTU-Machine-learning\\NTU-Machine-learning\\homework\\HW0')
os.getcwd()

顯示結(jié)果: 'C:\Users\Jianyu';
'C:\daka\machine-learning-Li\NTU-Machine-learning\NTU-Machine-learning\homework\HW0'
若要更改的當(dāng)前工作目錄不存在冈止,python會(huì)報(bào)錯(cuò)。

  1. 絕對路徑與相對路徑
    絕對路徑:從根文件開始的完整路徑候齿。
    相對路徑:從當(dāng)前工作路徑開始熙暴。
    路徑中可使用的特殊名稱:
    '.' :'這個(gè)目錄'的縮寫;
    '..' : 父文件夾。
  2. 創(chuàng)建新文件夾
    命令:
os.makedirs('文件夾的路徑和名稱')
  1. python處理文件慌盯、文件夾周霉、文件路徑的模塊
    os.path模塊
  2. 處理絕對路徑和相對路徑
    返回參數(shù)的絕對路徑的字符串:
os.path.abspath(path)

例如:

os.path.abspath('.')

顯示結(jié)果為:'C:\daka\machine-learning-Li\NTU-Machine-learning\NTU-Machine-learning\homework\HW0'(參見之前工作路徑的設(shè)置,一致)
判斷參數(shù)是否是絕對路徑:

os.path.isabs()

例如:

os.path.abspath('..')
os.path.isabs('.')
os.path.isabs(os.path.abspath('.'))

顯示結(jié)果為:False亚皂,True
查找第一個(gè)參數(shù)相對第二個(gè)參數(shù)的相對路徑:

os.path.relpath('','')

例如:

os.path.relpath('C:\\daka\\machine-learning-Li','C:\\daka\\machine-learning-Li\\NTU-Machine-learning\\NTU-Machine-learning\\homework\\HW0')

結(jié)果顯示為:'..\..\..\..'
返回參數(shù)的基本名稱(最后一個(gè)斜杠后的內(nèi)容)和目錄名稱(最后一個(gè)斜杠前的內(nèi)容)俱箱,同時(shí)調(diào)用基本名稱與目錄名稱形成元組:

os.path.basename(path)
os.path.dirname(path)
os.path.split()

例如:

path = 'c:\\Windows\\System32\\calc.exe'
os.path.basename(path)
os.path.dirname(path)
os.path.split(path)

結(jié)果顯示為:'calc.exe','c:\Windows\System32'灭必,('c:\Windows\System32', 'calc.exe')

  1. 查看文件大小和文件夾內(nèi)容
    查看文件的字節(jié)數(shù):
os.path.getsize(path)

返回包含參數(shù)中每個(gè)文件的文件名字符串列表:

os.listdir(path)

注意:該函數(shù)在os模塊而不是os.path模塊狞谱。
例如:

os.path.getsize('C:\\daka\\machine-learning-Li\\NTU-Machine-learning\\NTU-Machine-learning\\homework\\HW0')
os.listdir('C:\\daka\\machine-learning-Li\\NTU-Machine-learning\\NTU-Machine-learning\\homework\\HW0')

結(jié)果顯示為:0,
['01-Data', '02-Output', 'Q1.py', 'Q2.py', 'README.md']

  1. 檢查路徑有效性
    判斷文件或文件夾是否存在
    判斷是否是一個(gè)文件
    判斷是否是一個(gè)文件夾
os.path.exists(path)
os.path.isfile(path)
os.path.isdir(path)
  1. 文件讀寫(純文本文件禁漓,如txt跟衅,p等)
    基本三個(gè)步驟:
    1. 調(diào)用open()函數(shù),打開文件返回一個(gè)File對象播歼;
    2. 調(diào)用File對象的read()或write()方法伶跷,讀取或?qū)懭胛募?br> 3. 調(diào)用File對象的close()方法,關(guān)閉該文件
    注意必須有第三步秘狞,下一次才能再打開該文件叭莫。
    open()默認(rèn)是只讀方法,如果想寫入需要在open()方法內(nèi)傳入?yún)?shù)谒撼,'w'將寫入內(nèi)容覆蓋原內(nèi)容食寡,'a'在原有內(nèi)容末尾追加寫入內(nèi)容若open的文件不存在,'w'和'a'都會(huì)創(chuàng)建一個(gè)新的空文件廓潜。在寫入時(shí)write()方法不會(huì)自動(dòng)換行,需要自己添加換行符'\n'善榛。
    例如:
baconFile = open('bacon.txt','w')
baconFile.write('Hello World!\n')
baconFile.close()
baconFile = open('bacon.txt','a')
baconFile.write('Bacon is not a vegetable.')
baconFile.close()
baconFile = open('bacon.txt')
content = baconFile.read()
baconFile.close()
print(content)
  1. Numpy 模塊也可以讀取存儲(chǔ)文件將數(shù)據(jù)加載到Numpy數(shù)組中
np.loadtxt()
np.savetxt()
np.genfromtxt()     #面向結(jié)構(gòu)化數(shù)組和缺失數(shù)據(jù)處理辩蛋。
  1. 排序
    Numpy數(shù)組可以通過sort就地排序,np.sort()返回的是排序副本移盆。

練習(xí)題編程

我的答案:

import numpy as np
matrixA = np.loadtxt('..\\01-Data\\matrixA.txt',delimiter=',').reshape(1,50)
matrixB = np.loadtxt('..\\01-Data\\matrixB.txt',delimiter=',')
result_matrix = np.dot(matrixA,matrixB)
result_matrix.sort()
# print(result_matrix)
np.savetxt("..\\01-Data\\resultQ1.txt", result_matrix, fmt = "%d",delimiter="\r\n")

給出的答案:

import numpy as np

matrixA = []
for i in open('..\\01-Data\\matrixA.txt'):
    row = [int(x) for x in i.split(",")]
    matrixA.append(row)

matrixB = []
for j in open('..\\01-Data\\matrixB.txt'):
    row = [int(x) for x in j.split(",")]
    matrixB.append(row)

matrixA = np.array(matrixA)
matrixB = np.array(matrixB)

ans = matrixA.dot(matrixB)
ans.sort(axis=1)

np.savetxt("..\\01-Data\\Q1_ans.txt", ans, fmt="%d", delimiter="\r\n")

問題2的解決

使用pillow操作圖像

  1. 引入pillow的方法
    from PIL import Image
  2. 打開悼院,保存圖片
Image.open()
Image.save()
  1. 旋轉(zhuǎn)圖片
Image.rotate()

4.練習(xí)題2代碼

from PIL import Image
from PIL import ImageChops
import os
os.chdir('C:\\daka\\machine-learning-Li\\NTU-Machine-learning\\NTU-Machine-learning\\homework\\HW0\\01-Data')
image1 = Image.open('lena.png')
# image1.rotate(180).save('lena_reverse.png')
image2 = Image.open('lena_modified.png')
new_image = ImageChops.difference(image1,image2)
new_image.show()
new_image.save('result_image.png')

給出的答案:

from PIL import Image

lena = Image.open("lena.png")
lena_modified = Image.open("lena_modified.png")

w, h = lena.size
for j in range(h):
    for i in range(w):
        if lena.getpixel((i, j)) == lena_modified.getpixel((i, j)):
            lena_modified.putpixel((i, j), 255)

lena_modified.show()
lena_modified.save("ans_two.png")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市咒循,隨后出現(xiàn)的幾起案子据途,更是在濱河造成了極大的恐慌绞愚,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颖医,死亡現(xiàn)場離奇詭異位衩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)熔萧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門糖驴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人佛致,你說我怎么就攤上這事贮缕。” “怎么了俺榆?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵感昼,是天一觀的道長。 經(jīng)常有香客問我罐脊,道長定嗓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任爹殊,我火速辦了婚禮蜕乡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘梗夸。我一直安慰自己层玲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布反症。 她就那樣靜靜地躺著辛块,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铅碍。 梳的紋絲不亂的頭發(fā)上润绵,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音胞谈,去河邊找鬼尘盼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛烦绳,可吹牛的內(nèi)容都是我干的卿捎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼径密,長吁一口氣:“原來是場噩夢啊……” “哼午阵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起享扔,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤底桂,失蹤者是張志新(化名)和其女友劉穎植袍,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體籽懦,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡于个,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了猫十。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片览濒。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拖云,靈堂內(nèi)的尸體忽然破棺而出贷笛,到底是詐尸還是另有隱情,我是刑警寧澤宙项,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布乏苦,位于F島的核電站,受9級(jí)特大地震影響尤筐,放射性物質(zhì)發(fā)生泄漏汇荐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一盆繁、第九天 我趴在偏房一處隱蔽的房頂上張望掀淘。 院中可真熱鬧,春花似錦油昂、人聲如沸革娄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拦惋。三九已至,卻和暖如春安寺,著一層夾襖步出監(jiān)牢的瞬間厕妖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國打工挑庶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留言秸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓迎捺,卻偏偏與公主長得像井仰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子破加,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354