python 奥数_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显示图像,

49e1bb225f45fb4d696b2078420f90f0.png

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()

待完善…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值