python结合线性代数解决小学奥数问题

因为我的记忆力不好,还得辅导儿子的小学奥数,面对好多“脚”的问题,学了线性代数后根本就不用动脑筋,“两个动物”的通过克拉默法则一下就出来,“三个动物”以上的通过高斯变换就计算出来,都不用思考,于是对线性代数使用python的技术进行总结归纳,为了好玩,也会熟练掌握numpy,以便在神经网络中找到线性代数的身影
1 nump中矩阵运算
1.1 array和matrix
array的乘法,与矩阵的乘法得到结果不同,故虽然array表面和matrix看起来一样,实则不同,
numpy数组,矩阵和列表之间的相互转换,matrix的计算逻辑是a矩阵的行*b矩阵的列,那么数组的乘法计算逻辑是什么呢?numpy中数组和矩阵的乘法,从这篇文章,可以看出数组的乘法是两个数组相同坐标的数值计算,故连个结果不相同

a = np.array([[1,1,1],[0,1,1],[0,0,1]])
b = np.array([[1,0,1],[0,1,0],[1,0,1]])
print(a*b)
a = np.mat([[1,1,1],[0,1,1],[0,0,1]])
b = np.mat([[1,0,1],[0,1,0],[1,0,1]])
print(a*b)
--------------------------------
[[1 0 1]
 [0 1 0]
 [0 0 1]]
[[2 1 2]
 [1 1 1]
 [1 0 1]]

虽说如此,但是数组的内积,计算结果又与matrix乘法等价

a = np.array([[1,1,1],[0,1,1],[0,0,1]])
b = np.array([[1,0,1],[0,1,0],[1,0,1]])
print(np.dot(a,b))
print(a.dot(b))

1.2 解决小学奥数的一道题
1.3 矩阵转换
基础参见np.transpose
这里记录一个例子训练分类器,先看pytorch中图片显示问题中描述因为plt.imshow中参数顺序是imagesize,imagesize,channels,而npimg的参数顺序是channels,imagesize,imagesize,所以需要转换。那么为什么转换顺序是1,2,0呢,我们知道np.transpose的默认顺序是2,1,0.

def imshow(img):
    img = img / 2 + 0.5     # unnormalize
    npimg = img.numpy()
    # OpenCV读取图像的通道是BGR,而Matplotlib的通道是RGB
    plt.imshow(np.transpose(npimg, (1, 2, 0)))
    plt.show()

在看一个np.transpose的作用及在图像操作中的使用,你会发现np.transpose对照片逆时针旋转了90度,而np.transpose(npimp, (1, 2, 0))则显示的正确视角。
再阅读Pytorch显示图像,
1

import cv2 as cv
def imcv(img):
    npimp = img.numpy()
    cv.imshow('img',np.transpose(npimp))
    cv.imshow('img2', np.transpose(npimp, (1, 2, 0)))
    cv.namedWindow('img', cv.WINDOW_AUTOSIZE)
    cv.waitKey(0)
    cv.destroyAllWindows()

待完善…

发布了317 篇原创文章 · 获赞 168 · 访问量 46万+

猜你喜欢

转载自blog.csdn.net/warrah/article/details/102628735