问个有关图像eigen矩阵相乘处理的问题,Eigen作为一个提供eigen矩阵相乘处理的库,请问哪里有它各类函数的作用的参考文献。

matlab图像处理关于unit8的问题_百度知道Eigen 矩阵运算库在实际项目中的使用情况如何?
心血来潮,试了试纯模板技术写的 Eigen 并作了简单的性能测试,三个 1000 阶的方阵连乘运算 Eigen 比 MATLAB 快了一倍,比 OpenCV 快了 2 倍,但是这个库在实际项目中的稳定性和速度如何我还不大清楚,故有此问。另外,目前流行的 C++ 数值计算库很多都使用了 expression template 技术来抑制临时对象的生成,极大提高了运算性能,但对于同样使用这个技术的不同的库,速度却相差很大,例如 Armadillo,虽然它的底层采用了 BLAS 和 LAPACK,但在上述运算中比 Eigen 慢了整整 4 倍。产生这种现象的原因是什么?
总体来说还是Armadillo快些,需要自己设置一下,方法的网上有教程。下面是Eigen的项目:Projects using EigenExtensions, numerical computation and bindingsGoogle's
solver is a portable C++ library that allows for modeling and solving large complicated nonlinear least squares problems.The Manifold ToolKit
provides easy mechanisms to enable arbitrary algorithms to operate on manifolds. It also provides a Sparse Least Squares Solver (SLoM) and an Unscented Kalman Filter (UKFoM). is small boost::python wrapper for Eigen's core classes (dense fixed and dynamic-sized vectors, matrices, aligned boxes, with integer, floating and complex scalars) including operators and subset of Eigen's API methods. is a RandomizED Singular Value Decomposition library for sparse or very large dense matrices.The
package provides bindings and more for R. is a trust-region based non linear solver supporting sparse Hessians (C++ implementation with R binding).: a python binding of the Sparse module - alpha stage.: a large scale machine learning toolbox.: a statistical package based on Eigen that includes a reverse-mode automatic differentiation implementation., a Java wrapper for Eigen.ScienceThe Large Survey Synoptic Telescope (; ) is a project to build a 3.2Mpixel camera on an 8.4m telescope and survey the entire visible sky every three days., a GPL interpretor of IDL syntax codes.The
project at the . They even have an ., an opensource advanced molecular editor.The 3D astronomical visualization application
is now using Eigen for all orbital and geometric calculation., platform for dynamic particle models, uses Eigen for geometric computations (switched from the
package), an application suite for numerical analysis, linear algebra, advanced statistics, FEM, structural dynamics, data visualization, etc., an opensource program for the orientation of Laue exposures. uses Eigen as core library for matrix computations., a C++ library for molecular modeling., a tool for transcript assembly, differential expression, and differential regulation for RNA-Sequences.: a GPL library for simulation implementing the source-doublet panel method., particle dynamics software (DEM, FEM); Eigen wrapped using
in Python.Robotics and engineeringThe
company uses Eigen for the navigation and arm control of their next gen robots. (switched from blitz, ublas and tvmet)The
developed by . Open Source
autonomous Humanoid Robot Soccer Team and
use Eigen for navigation and world modeling.The , a set of libraries for SLAM, localization and computer vision, moved to Eigen (blog) (switched from home made math classes).: a C++ library for rigid body dynamics. a self-contained C++ library for robot kinematics, motion planning and control. is a Biomechanical ToolKit, licensed under BSD whose primary goal is to propose a set of tools for the analysis of the human body motion which is independent of any acquisition system. It proposes bindings for Matlab/Octave and Python, and a GUI software called Mokka to visualize/analyze 3D/2D motion capture data. is a "Iterative Closest Point" library for 3D mapping in robotics.Computer Graphics, a collaborative effort to develop a robust, easy to use, and efficient C++ software library of geometric data structures and algorithms., a large scale, BSD licensed, open project for point cloud processing. Uses Eigen as their math backend., an opensource C++ template library for the manipulation and processing of triangle and tetrahedral meshes. (switched from home made math classes), an opensource software for the processing and editing of unstructured 3D triangular meshes and point cloud. (switched from vcglib's math classes)Expe, an experimental framework for the rapid prototyping of graphics applications. No release yet, but it uses 90% of Eigen's features. (switched from home made math classes)., an opensource structure from motion library. (switched from FLENS) a simple library for multiple view geometry.Google uses Eigen for machine learning, computer vision, and optimization.In particular, see the mention of Ceres above.Mobile apps, an augmented reality appplication for IPhone and Android., maker of the iPhone games , , , and Lustre, uses Eigen extensively. Why roll your own matrix/vector/transformation code when there's Eigen?, an iPhone game, uses Eigen for 3D geometry calculations.KDE (our origins!), an educational physics simulator. (KDE's office suite), in particular , the painting and image editing module. Eigen is also used a bit by , the spreadsheet module, for matrix functions such as MINVERSE, MMULT, MDETERM. uses Eigen indirectly through the aforementioned
library.the Mandelbrot wallpaper plugin, some screensavers, , , etc.Others a 3D globe component.
同志,你确定纯用Eigen比MATLAB会快?我想知道你是怎么设置的?我用Eigen+Intel MKL在Release x64模式下也只是跟MATLAB运算速度差不多而已
我依稀记得OpenCV底层支持Eigen,OpenCV在机器视觉领域是王者之一,Eigen的影响力可见一斑。我在自己的项目大量使用Eigen来做数值计算,我觉得Eigen就是方便好用,速度瓶颈主要在算法而不是底层库。
显然openblas比matlab的mkl快。要速度的话,GPU加速吧,至少快5倍。
图中可以看到Eigen和主流的MKL不相上下,实际使用中也有类似的体验。值得注意的是Eigen的稀疏矩阵处理非常优秀,Armadillo之流无法与之相比。查看Libmesh才发现,其中也用到了Eigen,在Eigen页面里没有提到。LZ提到比Armadillo快了4倍,我觉得是可能的,Armadillo只是个和matlab长得像的壳子,具体计算还是调用Blas库来进行运算的,在优化层次上比不上Eigen
如果代码基本一样,eigen比arm快,看看底层是具体用的哪个库做运算,还有编译选项也很重要,template在-o2和-o0上会完全是两个速度
Armadillo+Openblas的组合更快,而且Armadillo的函数更接近Matlab
有没有遇到过这种情况,在用eigen库的时候用比较大的维数矩阵运算的时候有没有遇到过这种情况,在用eigen库的时候用比较大的维数矩阵运算的时候,会出现这样的错误
已有帐号?
无法登录?
社交帐号登录后使用快捷导航没有帐号?
只需一步, 快速开始
只需一步,快速开始
查看: 40218|回复: 180
fortran一些函数的总结,大家可以参考
在线时间 小时
&成长值: 12810
登录后查看更多精彩内容~
才可以下载或查看,没有帐号?
附录 C SCILAB 部分函数指令表
(c)LIAMA. All rights reserved.
(注解:本指令表只收集了部分常用指令, 有关全部指令请参照文档文件)
& & +&&加& && &
-&&减& && &
*&&矩阵乘& &
& &数组乘&&*.
1. 通用指令
^&&矩阵乘方
数组乘方& &^.
\&&反斜杠或左除& && && &
help&&在线帮助
/&&斜杠或右除& && && &&&
apropos& && & 文档中关键词搜寻
& &或.\&&数组除/.
ans&&缺省变量名以及最新表达式的运
==&&等号& &&&
~=&&不等号& &
clear&&从内存中清除变量和函数
&&&小于& &&&
exit&&关闭 SCILAB
&& &大于& &&&
quit&&退出 SCILAB
&=&&小于或等于& && && &&&
save&&把内存变量存入磁盘
&=&&大于或等于& && && &&&
exec&&运行脚本文件
&,and&&逻辑与& && && && && &
mode&&文件运行中的显示格式
|,or&&逻辑或& && && && && &
getversion&&显示 SCILAB 版本
~,not&&逻辑非& && && && && &
ieee&&浮点运算溢出显示模式选择
:&&冒号& && && && && &&&
who&&列出工作内存中的变量名
( )&&园括号& && && && && &
edit&&文件编辑器
[ ]&&方括号& && && && && &
type&&变量类型
{ }&&花括号& && && && && &
what&&列出 SCILAB 基本命令
& && && && && &小数点&&.
format&&设置数据输出格式
,&&逗号& && && && && &&&
chdir&&改变当前工作目录
;&&分号& && && && && &&&
getenv&&给出环境值
//&&注释号& && && && && &
mkdir&&创建目录
=&&赋值符号& && && && &
pwd&&显示当前工作目录
'&&引号& && && && && &&&
evstr&&执行表达式
'&&复数转置号& && && &&&
& && && && && &转置号&&'.
ans&&最新表达式的运算结果
2.运算符和特殊算符 %eps 浮点误差容限, =2
%i&&虚数单位 = √(-1)&&
%inf 正无穷大
%pi&&圆周率,
π=3.7....
3. 编程语言结构
abort 中止计算或循环
break 终止最内循环
case 同 select 一起使用
continue 将控制转交给外层的 for或
else 同 if一起使用
elseif 同 if一起使用
end&&结束 for,while,if 语句
for&&按规定次数重复执行语句
if&&条件执行语句
otherwise 可同 switch 一起使用
pause 暂停模式
return 返回
select 多个条件分支
then 同 if一起使用
while 不确定次数重复执行语句
eval 特定值计算
feval 函数特定值计算或多变量计算
function 函数文件头
global 定义全局变量
isglobal& && & 检测变量是否为全局变量
error 显示错误信息
lasterror 显示最近的错误信息
sprintf 按格式把数字转换为串
warning 显示警告信息
4.基本数学函数
acos 反余弦
acosh 反双曲余弦
acot 反余切
acoth 反双曲余切
acsc 反余割
acsch 反双曲余割
asin 反正弦
asinh 反双曲正弦
atan 反正切
atanh 反双曲正切
cosh 双曲余弦
coth 双曲余切
sinh 双曲正弦
tanh 双曲正切
log&&自然对数
log10 常用对数
log2 以 2为底的对数
sqrt 平方根
abs&&绝对值
conj 复数共轭
imag 复数虚部
real 复数实部
ceil 向上(正无穷大方向)取整
fix&&向零方向取整
floor 向下(负无穷大方向)取整
round 四舍五入取整
sign 符号函数
gsort 降次排序
erf&&误差函数
erfc 补误差函数
gamma gamma 函数
interp 插值函数
interpln 线性插值函数
intsplin 样条插值函数
smooth 样条平滑函数 spline 样条函数
quarewave 方波函数
sign 符号函数
double 将整数转换为双精度浮点数
5.基本矩阵函数和操作&&
eye&&单位阵
zeros 全零矩阵
ones 全 1 矩阵
rand 均匀分布随机阵
genmarkov 生成随机 Markov 矩阵
linspace 线性等分向量
logspace 对数等分向量
logm 矩阵对数运算
cumprod 矩阵元素累计乘
cumsum 矩阵元素累计和
toeplitz Toeplitz 矩阵
disp 显示矩阵和文字内容
length 确定向量的长度
size 确定矩阵的维数
diag 创建对角阵或抽取对角向量
find 找出非零元素 1的下标
matrix 矩阵变维
rot90 矩阵逆时针旋转 90度
sub2ind 据全下标换算出单下标
tril 抽取下三角阵
triu 抽取上三角阵
conj 共轭矩阵
companion 伴随矩阵
det&&行列式的值
norm 矩阵或向量范数
nnz&&矩阵中非零元素个数
null 清空向量或矩阵中的某个元素
orth 正交基
rank 矩阵秩
trace 矩阵迹
cond 矩阵条件数
rcond 逆矩阵条件数
inv&&矩阵的逆
lu&&LU分解或高斯消元法
qr&&QR分解
givens Givens 变换
linsolve 求解线性方程
lyap Lyapunov 方程
hess Hessenberg 矩阵
poly 特征多项式
schur Schur 分解
expm 矩阵指数
expm1 矩阵指数的 Pade逼近
expm2 用泰勒级数求矩阵指数
expm3 通过特征值和特征向量求矩阵
funm 计算一般矩阵函数
logm 矩阵对数
sqrtm 矩阵平方根
6.&&特性值与奇异值
spec 矩阵特征值
gspec 矩阵束特征值
bdiag 块矩阵, 广义特征向量
eigenmarkov 正则化 Markov 特征向量
pbig 特征空间投影
svd&&奇异值分解
sva&&奇异值分解近似
7. 矩阵元素运算
cumprod 元素累计积
cumsum 元素累计和
hist 统计频数直方图
max&&最大值
mean 平均值 median 中值
min&&最小值
prod 元素积
sort 由大到小排序
std&&标准差
sum&&元素和
trapz 梯形数值积分
corr 求相关系数或方差
8. 稀疏矩阵运算
sparse 稀疏矩阵(只存储非零元素)
adj2sp 邻接矩阵转换为稀疏矩阵
full 稀疏矩阵转换为全矩阵
mtlb_sparse 将 SCILAB 稀疏矩阵转换为
MATLAB稀疏矩阵格式
sp2adj 稀疏矩阵转换为邻接矩阵
speye 稀疏矩阵方式单位阵
sprand 稀疏矩阵方式随机矩阵
spzeros 稀疏矩阵方式全零阵
lufact 稀疏矩阵 LU分解
lusolve&&稀疏矩阵方程求解
spchol 稀疏矩阵 Cholesky分解
9. 输入输出函数
diary 生成屏幕文本记录
disp 变量显示
file 文件管理
input&&用户键盘输入
load 读已存的变量
mclose 关闭文件
mget 读二进制文件
mgetl 按行读 ASCII码文件
mgetstr 读字符串中单个字
mopen 打开文件
mput 写二进制文件
mfscanf 读 ASCII 码文件
print 将变量记录为文件
read 读矩阵变量
save 存变量为二进制文件
strartup 启动文件
write 按格式存文件
xgetfile 对话方式获取文件路径
x_dialog 建立 Xwindow参数输入对话框
Tk_Getvar 得到 Tk文件变量
Tk_EvalFile 执行 Tk 文件
10. 函数与函数库操作
deff 在线定义函数
edit 函数编辑器
function 打开函数定义
functions SCILAB 函数或对象
genlib 在给定目录下建立所有文件的
get_function_path& &读函数库的文件存储目录
getd 读函数库中的全部文件
getf 在文件中定义一个函数
lib&&函数库定义
macro SCILAB函数或对象
macrovar 输入变量个数
newfun 输出变量个数
11. 字符串操作
code2str 将 SCILAB数码转换为字符串
convstr 字母大小转换
emptystr 清空字符串
grep 搜寻相同字符串
part 字符提取
str2code 将字符串转换为 SCILAB数码
string 字符串转换 strings SCILAB 对象, 字符串
strcat 连接字符
strindex 字符串的字符位置搜寻
strsubst 字符串中的字符替换
12. 日期与时间
getdate 读日期与时间
timer CPU时间计时
13.&&二维图形函数
plot2d&&直角坐标下线性刻度曲线&&
champ& && &&&2 维向量场
champ1& && & 由颜色箭头表示的 2维向量场&&
contour2d& & 等高线图
errbar&&曲线上增加误差范围框线条
grayplot& &&&应用颜色表示的表面
xgrid& && &&&画坐标网格线
histplot& &&&统计频数直方图
Matplot& && &散点图阵列
14. 三维图形函数
plot3d& &&&三维表面
plot3d1& & 用颜色或灰度表示的三维表面
param3d& & 三维中单曲线
param3d1 三维中多曲线
contour& & 三维表面上的等高线图
hist3d& &&&三维表示的统计频数直方图
geom3d& &&&三维向二维上的投影
15. 线条类图形
xpoly& &&&单线条或单多边形
xpolys& & 多线条或多各多边形
xrpoly& & 正多边形
xsegs& &&&非连接线段
xfpoly& & 单个多边形内填充
xfpolys&&多个多边形内填充
xrect& & 矩形
xfrect& &单个矩形内填充
xrects& &多个矩形内填充
xarc& &&&单个弧线段或弧园
xarcs& & 多个弧线段或弧园
xfarc& & 单个弧线段或弧园填充
xfarcs& &多个弧线段或弧园填充
xarrows& &多箭头
16. 图形注释, 变换
xstring& &&&图形中字符
xstringb& & 框内字符
xtitle& && &图形标题
xaxis& && & 轴名标注
plotframe& &图形加框并画坐标网格线
isoview& &等尺寸比例显示(原图形窗口不
square& & 等尺寸比例显示(原图形窗口改
xsetech& &设置小窗口
xchange&&转换实数为图形象素坐标值
subplot& &设置多个子窗口
17. 图形颜色及图形文字
colormap& &&&应用颜色图
getcolor& &&&交互式选择颜色图
addcolor& && &增加新色于颜色图 graycolormap&&线性灰度图
hotcolormap&&热色(红到黄色)颜色图
xset& && &&&图形显示方式设定
xget& && &&&读当前图形显示方式设定
getsymbol& &交互式选择符号和尺寸
18. 图形文件及图形文字
xsave& &&&将图形存储为文件
xload& &&&从磁盘中读出图形文件
xbasimp& &将图形按 PS文件打印或存储为
xs2fig& & 将图形生成 Xfig 格式文件
xbasc& &&&取消图形窗及其相关内容
xclear& & 清空图形窗
driver& & 选择图形驱动器
xinit& &&&图形驱动器初始化
xend& && &关闭图形
xbasr& &&&图形刷新
replot& & 更改显示范围后的图形刷新
xdel& && &关闭图形
xname&&改变当前图形窗名称
19. 控制分析用图形
bode& && & 伯德图坐标
gainplot& &幅值图坐标(伯德图中的幅值图)
nyquist& & 奈奎斯特图
m_circle M-圆图
chart& && &尼库拉斯图
black&&Black-图
evans& && &根轨迹图
sgrid& && &s 平面图
plzr& && & 零-极点图
zgrid& && &z 平面图
20. 图形应用中的其它指令
graphics 图形库指令表
xclick& && &等待鼠标在图形上的点击输入
locate& && &由鼠标点击读入图形中的多点
xgetmouse& &由鼠标点击读入图形中的当前点
21. 系统与控制
abcd&&状态空间矩阵
cont_mat 可控矩阵
csim&&线性系统时域响应
dsimul&&状态空间的离散时域响应
feedback 反馈操作符
flts&&时域响应(离散、采样系统〕
frep2tf&&基于传递函数的频域响应
freq&&频域响应
g_margin 幅值裕量
imrep2ss 基于状态空间的脉冲响应
lin&&线性化操作
lqe&&Kalman 滤波器
lqg&&LQG补偿器
lqr&&LQ补偿器
ltitr&&基于状态空间的离散时域响应
obscont&&基于观测器的控制器
observer 观测器
obsv_mat 观测矩阵
p_margin 相位裕量
phasemag 相位与幅值计算
ppol&&极点配置
repfreq&&频域响应
ricc&&Riccati 方程
rtitr&&基于传递函数的离散时域响应
sm2ss&&系统矩阵到状态空间变换
ss2ss 反馈连接的状态空间到状态空
ss2tf&&状态空间到传递函数变换
stabil&&稳定性计算
tf2ss&&传递函数到状态空间变换 time_id&&SISO系统最小方差辨识
22. 鲁棒控制
augment&&被控对象增广操作
bstap&&Hankel 矩阵近似
ccontrg& &H∞控制器
dhnorm&&离散 H∞范数
h2norm&&H2 范数
h_cl&&闭环矩阵
h_inf&&H∞控制器
h_norm&&H∞范数
hankelsv Hankel 矩阵奇异值
leqr&&H∞控制器的 LQ增益
linf&&无穷范数
riccati&&Riccati 矩阵
sensi&&敏感函数
23. 动态系统
arma&&ARMA 模型
arma2p&&基于 AR模型中获得多项式矩阵
armac&&ARMAX 辨识
arsimul&&ARMAX系统仿真
noisegen 噪声信号发生器
odedi&&常微分方程仿真检测
prbs_a&&伪随机二进制序列发生器
reglin&&线性拟合
24. 系统与控制实例
artest&&Arnold 动态系统
bifish&&鱼群人口发展的离散时域模型
boucle&&具有观测器的动态系统相位图
chaintest 生物链模型
gpech&&渔业模型
fusee&&登陆火箭问题
lotest&&Lorennz 吸引子
mine&&采矿问题
obscontl 可控可观系统
portr3d&&三维相位图
portrait 二维相位图
recur&&双线性回归方程
systems&&动态系统
tangent&&动态系统的线性化
tadinit&&动态系统的交互初始化
25. 非线性工具(优化与仿
bvode&&边界值问题的常微分方程
dasrt&&隐式微分方程过零解
dassl&&代数微分方程
datafit&&基于测量数据的参数辨识
derivative 导数计算
fsolve&&非线性函数过零解
impl&&线性微分方程
int2d&&二维定积分
int3d&&三维定积分
intg&&不定积分
leastsq&&非线性最小二乘法
linpro&&线性规划
lmisolver 线性不等矩阵
ode&&常微分方程
ode_discrete 离散常微分方程
ode_root 常微分方程根解
odedc&&连续/离散常微分方程
optim&&非线性优化
quapro&&线性二次型规划
semidef&&半正定规划
26. 多项式计算 coeff&&多项式系数
coffg&&多项式矩阵逆
degree&&多项式阶数
denom&&分母项
derivat&&有理矩阵求导
determ&&矩阵行列式值
factors&&因式分解
hermit&&Hermit 型
horner&&多项式计算
invr&&有理矩阵逆
lcm&&最小公倍数
ldiv&&多项式矩阵长除
numer&&分子项
pdiv&&多项式矩阵除
pol2des&&多项式矩阵到表达式变换
pol2str&&多项式到字符串变换
polfact&&最小因式
residu&&余量
roots&&多项式根
simp&&多项式化简
systmat&&系统矩阵
27. 信号处理
%asn&&椭圆积分
%k&&Jacobi 完全椭圆积分
%sn&&Jacobi 椭圆函数
analpf&&模拟量低通滤波器
buttmag&&Butterworth 滤波器响应
cepstrum 倒谱计算
cheb1mag Chebyshev 一型响应
cheb2mag Chebyshev 二型响应
chepol&&Chebyshev 多项式
convol&&卷积
corr&&相关, 协方差
cspect&&谱估计(应用相关法)
dft&&离散富立叶变换
fft&&快速富立叶变换
filter&&滤波器建模
fsfirlin FIR滤波器设计
hank&&协方差矩阵到 Hankel矩阵变换
hilb&&Hilbert 变换
iir&&IIR数字滤波器
intdec&&信号采样率更改
kalm&&Kalman 滤波器更新
mese&&最大熵谱估计
mfft&&多维快速富立叶变换
mrfit&&频率响应拟合
phc&&Markov 过程
srkf&&Kalman 滤波器平方根
sskf&&稳态 Kalman 滤波器
system&&观测更新
wfir&&线性相位 FIR滤波器
weiener&&Weiener(维纳)滤波器
window&&对称窗函数
yulewalk 最小二乘滤波器
zpbutt&&Buthererworth 模拟滤波器
zpch1&&Chebyshev 模拟滤波器
28. 音频信号
analyze&&音频信号频域图
auread&&读 *.au 音频文件
auwrite&&写 *.au 音频文件
lin2mu&&将线性信号转换为μ率码信号
loadwave 取 *.wav 音频文件
mapsound 音频信号图示
mu2lin&&将μ率码信号转换为线性信号
playsnd&&音频信号播放
savewave 存 *.wav 音频文件
wavread&&读 *.wav 音频文件
wavwrite 写 *.wav 音频文件
29. 语言与数据转换工具 ascii&&字符串的 ASCII码
excel2sci 读 ASCII 格式的 Excel 文件
fun2string 将 SCILAB 函数生成 ASCII 码
mfile2sci 将 MATLAB 的 M 格式文件转换为
SCI格式文件
mtlb_load 取 MATLAB第 4版本文件中变量
matlb_save 按 MATLAB 第 4 版本文件格式存
pol2tex&&将多项式转换为 TeX格式
sci2for 将 SCILAB 函数转换为 FORTRAN
texprint 按 TeX 格式输出 SCILAB 对象
translatepaths 将子目录下的所有 MATLAB文件
转换为 SCI文件格式
必须赞一个!
已有4人关注本帖
密码修改失败请联系qq:
在线时间 小时
{:soso__:} 超级给力的,以后也许可以拿去做个高亮神马的用
密码修改失败请联系qq:
在线时间 小时
好东西:):):):):)
密码修改失败请联系qq:
在线时间 小时
谢谢,超赞!
密码修改失败请联系qq:
在线时间 小时
密码修改失败请联系qq:
在线时间 小时
谢谢,超赞!
密码修改失败请联系qq:
在线时间 小时
&成长值: 12810
道狼52203 发表于
谢谢,超赞!
{:2_31:}偷来的,呵呵
密码修改失败请联系qq:
在线时间 小时
顶起来,工欲善其事,必先利其器。知道fortran的内置函数怎么用,就不用自己再去编个子函数来形成相同的功能,而且调用子函数还要用call,花机时。
密码修改失败请联系qq:
在线时间 小时
&成长值: 12810
godenflame135 发表于
顶起来,工欲善其事,必先利其器。知道fortran的内置函数怎么用,就不用自己再去编个子函数来形成相同的功能 ...
互相学习啊,呵呵
密码修改失败请联系qq:
在线时间 小时
言深深 发表于
互相学习啊,呵呵
大家互相学习瑟!
密码修改失败请联系qq:C++矩阵处理库--Eigen初步使用
C++矩阵处理库--Eigen初步使用
[摘要:项目要举行比拟多的矩阵操纵,迥殊是两维矩阵。刚最先做试验时,应用了静态两维数组,因而写了一堆Matrix函数,做矩阵的乘除减加供顺供止列式。试验做完了,最先做代码劣化,收]
项目要进行比较多的矩阵操作,特别是二维矩阵。刚开始做实验时,使用了动态二维数组,于是写了一堆Matrix函数,作矩阵的乘除加减求逆求行列式。实验做完了,开始做代码优化,发现Matrix.h文件里适用性太低,而且动态二维数组的空间分配与释放也影响效率,于是寻找其他解决方案。
首先考虑的是与Matlab混合编程,折腾了半天把Matlab环境与VS2010环境之后,发现Matlab编译出来的函数使用起来也比较麻烦,要把数组转化成该函数适用的类型后才能使用这些函数。我的二维数组也不是上千万维的,估计这个转化的功夫就牺牲了一部分效率了。(如果谁有混合编程的心得,求帮忙,囧。。。)
接着想到使用一维数组的方法,或者把一维数组封装在一个类里边。想着又要写一堆矩阵操作函数头就大,索性谷歌了一下矩阵处理库,除了自己之前知道的OpenCV库(之前由于转化cvarr麻烦,于是放弃),还有Eigen, Armadillo。
http://blog.csdn.net/houston11235/article/details/8501135该博客对这三个库的效率做了一个简单的评测,OpenCV库的矩阵操作效率是最低的,还好我没使用。Eigen速度最快,与自己定义数组的操作效率相当(-
-,才相当吗?我本来还想找个更快的呢)。于是选择使用Eigen。
进入正题。
http://eigen.tuxfamily.org/index.php?title=Main_Page这里是官网,直接把包下载下来,不大,也就几M,我是直接放在自己项目文件夹(考虑项目封装时,这样比较方便),放在VS2010 &INCLUDE&文件夹。
简单使用:
看了一下官方文档,Eigen库除了能实现各种矩阵操作外,貌似还提供《数学分析》中的各种矩阵操作(包括L矩阵U矩阵)。目前我使用到的还是简单的矩阵操作,如加减乘除,求行列式,转置,逆,这些基本操作只要:
#include &Eigen/Eigen& using namespace E就能实现,别忘了名空间Eigen。
包含的类型:
Matrix&float,Dynamic,Dynamic& &=&&MatrixXf
Matrix&double,Dynamic,1& &=&&VectorXd
Matrix&int,1,Dynamic& &=&&RowVectorXi
Matrix&float,3,3& &=&&Matrix3f
Matrix&float,4,1& &=&&Vector4f
Array&float,Dynamic,Dynamic& &=& ArrayXXf
Array&double,Dynamic,1& &=& ArrayXd
Array&int,1,Dynamic& &=& RowArrayXi
Array&float,3,3& &=& Array33f
Array&float,4,1& &=& Array4f
如上表,主要包括两种类型,Matrices与Arryays,接着是这两种类型的派生类型。现在我用到的是Matrices(我不明白这两种类型在效率间有什么差距,囧。。。),其中Matrix代表二维矩阵,Vector代表列向量RowVector代表行向量。如果后面跟着X,则代表是动态的数组,运行时可以根据需求改变,如果是数字,则代表是静态的(根据实验,最多能建立4维的静态矩阵或者数组,- -,为嘛不是6维,实验正好需要)。i代表int类型,f代表float类型,d代表double。
对应关系:
静态,4&=n&=1
Arrays类型的话也跟Matrices差不多。
基本操作,定义,初始化,矩阵操作:
#include &iostream& #include &Eigen/Eigen& using namespace E
void foo(MatrixXf& m) {
Matrix3f m2=Matrix3f::Zero(3,3);
m2(0,0)=1;
m=m2; } int main() {
/* 定义,定义时默认没有初始化,必须自己初始化 */
MatrixXf m1(3,4);
//动态矩阵,建立3行4列。
MatrixXf m2(4,3); //4行3列,依此类推。
MatrixXf m3(3,3);
Vector3f v1;
//若是静态数组,则不用指定行或者列
/* 初始化 */
m1 = MatrixXf::Zero(3,4);
//用0矩阵初始化,要指定行列数
m2 = MatrixXf::Zero(4,3);
m3 = MatrixXf::Identity(3,3); //用单位矩阵初始化
v1 = Vector3f::Zero();
//同理,若是静态的,不用指定行列数
m1 && 1,0,0,1,
//也可以以这种方式初始化
m2 && 1,0,0,
/* 元素的访问 */
v1[1] = 1;
m3(2,2) = 7;
cout&&&v1:n&&&v1&&
cout&&&m3:n&&&m3&&
/* 复制操作 */
VectorXf v2=v1;
//复制后,行数与列数和右边的v1相等,matrix也是一样,
//也可以通过这种方式重置动态数组的行数与列数
cout&&&v2:n&&&v2&&
/* 矩阵操作,可以实现 + - * / 操作,同样可以实现连续操作(但是维数必须符合情况),
如m1,m2,m3维数相同,则可以m1 = m2 + m3 + m1; */
m3 = m1 * m2;
cout&&&m3:n&&&m3&&
cout&&&v2:n&&&v2&&
//m3 = m3.transpose();
这句出现错误,估计不能给自己赋值
cout&&&m3转置:n&&&m3.transpose()&&
cout&&&m3行列式:n&&&m3.determinant()&&
m3 = m3.inverse();
cout&&&m3求逆:n&&&m3&&
system(&pause&);
return 0; }
v1: 0 1 0 m3: 1 0 0 0 1 0 0 0 7 v2: 0 1 0 m3:
1 64 v2: 0 2 0 m3转置:
1 64 m3行列式: 2540 m3求逆:    0.. -0.
-0.    0..
-0. -0.    0.0156401
基本的操作就是以上这些,有了这个库,以后就不用做重复工作撩!
感谢关注 Ithao123C/c++频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
IThao123周刊

我要回帖

更多关于 eigen 矩阵拼接 的文章

 

随机推荐