OpenMV上的矩阵库

文章介绍了作者为17届全国大学生智能汽车竞赛中国石油大学(华东)智能视觉组开发的一个OpenMV上的矩阵库,该库模仿numpy接口,便于算法移植。库支持矩阵的基本运算、转置、求逆、行列式计算及解线性方程组等功能,旨在简化在限制性硬件上的矩阵运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

17届全国大学生智能汽车竞赛 中国石油大学(华东)智能视觉组 国特开源

OpenMV上的矩阵库

众所周知啦,numpy是python中非常重要的的一个库,支持各种矩阵的操作。在我们比赛的使用的art上是不可以调用的。但我们在art上确实会有一定的需求,比如进行透视变换。这时候就需要一个矩阵运算库了。
其实OpenMV的文档上也给出了几个第三方的矩阵运算库,它们都很不错,但是其接口风格与numpy不太相似,并且有些也没有操作符重载。为了满足我自己的需求,于是便自己动手编写了一个。
在这个库,用法基本与numpy一致。如果你熟悉numpy,相信一定能很快掌握。这里需要解释一下为什么要模仿numpy的接口:在测试算法时,我有时候会先在电脑上用opencv进行测试(在电脑上方便调试),这个时候,算法的核心部分一般由numpy实现,当将其移到art或者OpenMV上时,只需要将 import numpy as np 改为 import openmv_numpy as np就可以了,算法核心部分基本不用改。
因为能力与时间有限,还要很多需要完善的地方,这里仅是抛砖引玉。

基本用法介绍

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的不同,矩阵乘法用*代替,而不是@。

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]]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值