17届全国大学生智能汽车竞赛 中国石油大学(华东)智能视觉组 国特开源
OpenMV上的矩阵库
众所周知啦,numpy是python中非常重要的的一个库,支持各种矩阵的操作。在我们比赛的使用的art上是不可以调用的。但我们在art上确实会有一定的需求,比如进行透视变换。这时候就需要一个矩阵运算库了。
其实OpenMV的文档上也给出了几个第三方的矩阵运算库,它们都很不错,但是其接口风格与numpy不太相似,并且有些也没有操作符重载。为了满足我自己的需求,于是便自己动手编写了一个。
在这个库,用法基本与numpy一致。如果你熟悉numpy,相信一定能很快掌握。这里需要解释一下为什么要模仿numpy的接口:在测试算法时,我有时候会先在电脑上用opencv进行测试(在电脑上方便调试),这个时候,算法的核心部分一般由numpy实现,当将其移到art或者OpenMV上时,只需要将 import numpy as np 改为 import openmv_numpy as np就可以了,算法核心部分基本不用改。
因为能力与时间有限,还要很多需要完善的地方,这里仅是抛砖引玉。文章来源:https://www.toymoban.com/news/detail-549155.html
基本用法介绍
1. 定义
import openmv_numpy as np
A = np.array([[2,1],
[2,2]])
print(A)
print(A.shape)
[[2, 1], [2, 2]]
(2, 2)
2. 基本运算
通过操作符重载实现矩阵的基本运算
这里需要注意,与numpy的不同,矩阵乘法用*代替,而不是@。文章来源地址https://www.toymoban.com/news/detail-549155.html
B= np.array([[1,1],
[1,1]])
print(A+B)
print(A-B)
print(A*B)
[[3, 2], [3, 3]]
[[1, 0], [1, 1]]
[[3, 3], [4, 4]]
3. 其它运算
- 转置
- 求逆
- 求矩阵行列式值
print(A.T)
print(A.inv())
print(A.det())
[[2, 2], [1, 2]]
[[1.0, -0.5], [-1.0, 1.0]]
2.0
4. 快速构建
print(np.ones((2,2)))
print(np.zeros((2,2)))
print(np.full((2,2),1))
print(np.eye(2,1))
[[1, 1], [1, 1]]
[[0, 0], [0, 0]]
[[1, 1], [1, 1]]
[[1, 0], [0, 1]]
5. 解线性方程组
A = np.array([[12,-3,3],
[-18,3,-1],
[1,1,1]])
B = np.array([[15],
[-15],
[6]])
X = np.solve(A,B)
print(X)
[[1.0000000000000004], [2.0000000000000004], [3.0]]
到了这里,关于OpenMV上的矩阵库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!