@[机器学习]
#机器学习HW0
import numpy as np
matrixA = []
for i in open("matrixA.txt"):
row = [int(x) for x in i.split(",")]
matrixA.append(row)
matrixB = []
for j in open("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("Q1_ans.txt", ans, fmt="%d", delimiter="\r\n")
首先,你会得到这样的源代码,但是实际上很有可能编译不通过,会出现“FileNotFoundError: [Errno 2] No such file or directory: ‘/01-Data\matrixA.txt’”这样的错误,他们无法找到maxtrixA这个文本,实际上这是由于maxtrixA与这个python代码不在同一级文件夹内导致的错误。解决的办法有两种:第一种最直接的方法就是把这两个文件从01-Data文件夹移动到同一个文件夹。不过这个办法不是很推荐,因为当文件众多的时候这样子会显得整个项目排列的非常混乱。
另外一种办法就是利用打开文件的绝对路径或者相对路径方法。绝对路径比较简单就是全部照抄把路径。相对路径就是在这个前面添加./01-Data就可以,表示的是在当前文件夹(就是HW0文件夹)的01-Data文件夹里的东西。所以最后修正后的代码就是:
import numpy as np
matrixA = []
for i in open("./01-Data/matrixA.txt"):
row = [int(x) for x in i.split(",")]
#这里的i.split表示去除txt里面的‘,’标识,只读取数字。即用逗号作为分隔符进行切片操作。
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("Q1_ans.txt", ans, fmt="%d", delimiter="\r\n")
np.savetxt("./02-Output/Q1_ans.txt", ans, fmt="%d", delimiter="\r\n")
#这里可以改成下面那个代码就能把输出放进Output文件夹里面了。
其他地方这个就没有什么难点了,无非就是将其转换为np中的array数组,然后利用np.dot函数进行矩阵相乘。
另外一个处理图片的函数一样的问题,修改后的代码如下:
from PIL import Image
lena = Image.open("./01-Data/lena.png")
lena_modified = Image.open("./01-Data/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)
#getpixel is to get the position of the pixel, and putpixel is replace the position by the command color.
#255 represents white color.
lena_modified.show()
lena_modified.save("./02-Output/ans_two.png")
所以作业0没有什么难度,主要就是熟悉怎么打开文件和了解一些python基本知识。之后我在解答各个作业的时候也会补充非常多的python的函数怎么用,便于今后的学习与理解。