Eigen(5)Array类和元素级操作

0. 为什么使用Array

    相对于Matrix提供的线性代数运算,Array类提供了更为一般的数组功能。Array类为元素级的操作提供了有效途径,比如点加(每个元素加值)或两个数据相应元素的点乘。

1. Array

    Array是个类模板(类似于Matrx,前三个参数是必须指定的,后三个是可选的,这点和Matrix是相同的。

    Array<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>

    Eigen也提供的一些常用类定义,Array是同时支持一维和二维的(Matrix二维,Vector一维)。

Type

Tyoedef

Array<float,Dynamic,1>

ArrayXf

Array<float,3,1>

Array3f

Array<double,Dynamic,Dynamic>

ArrayXXd

Array<double,3,3>

Array33d

2. 获取元素

    读写操作重载于matrix << 可以用于初始化array或打印。

#include <Eigen/Dense>#include <iostream>using namespace Eigen;using namespace std;int main(){ArrayXXf  m(2,2);// assign some values coefficient by coefficientm(0,0) = 1.0; m(0,1) = 2.0;m(1,0) = 3.0; m(1,1) = m(0,1) + m(1,0);// print values to standard outputcout << m << endl << endl;// using the comma-initializer is also allowedm << 1.0,2.0,3.0,4.0;// print values to standard outputcout << m << endl;}

3. 加法和减法

    和matrix类似,要求array的尺寸一致。同时支持array+/-scalar的操作!

#include <Eigen/Dense>#include <iostream>using namespace Eigen;using namespace std;int main(){ArrayXXf a(3,3);ArrayXXf b(3,3);a << 1,2,3,4,5,6,7,8,9;b << 1,2,3,1,2,3,1,2,3;// Adding two arrayscout << "a + b = " << endl << a + b << endl << endl;// Subtracting a scalar from an arraycout << "a - 2 = " << endl << a - 2 << endl;}

输出

a + b =

 2  4  6

 5  7  9

 8 10 12

 

a - 2 =

-1  0  1

 2  3  4

 5  6  7

4. 乘法

    支持array*scalar(类似于matrix),但是当执行array*array时,执行的是相应元素的乘积,因此两个array必须具有相同的尺寸。

int main(){ArrayXXf a(2,2);ArrayXXf b(2,2);a << 1,2,3,4;b << 5,6,7,8;cout << "a * b = " << endl << a * b << endl;}

 

a * b =

 5 12

21 32

5. 其他元素级操作

Function

function

abs

绝对值

sqrt

平方根

min(.)

两个array相应元素的最小值

int main(){ArrayXf a = ArrayXf::Random(5);a *= 2;cout << "a =" << endl<< a << endl;cout << "a.abs() =" << endl<< a.abs() << endl;cout << "a.abs().sqrt() =" << endl<< a.abs().sqrt() << endl;cout << "a.min(a.abs().sqrt()) =" << endl<< a.min(a.abs().sqrt()) << endl;}

6. arraymatrix之间的转换

    当需要线性代数类操作时,请使用Matrix;但需要元素级操作时,需要使用Array。这样就需要提供两者的转化方法。

    Matrix提供了.array()函数将它们转化为Array对象。

    Array提供了.matrix()函数将它们转化为Matrix对象。

    在Eigen,在表达式中混合MatrixArray操作是被禁止的,但是可以将array表达式结果赋值为matrix

    另外,Matrix提供了cwiseProduct函数也实现了点乘。

#include <Eigen/Dense>#include <iostream>using namespace Eigen;using namespace std;int main(){MatrixXf m(2,2);MatrixXf n(2,2);MatrixXf result(2,2);m << 1,2,3,4;n << 5,6,7,8;result = m * n;cout << "-- Matrix m*n: --" << endl << result << endl << endl;result = m.array() * n.array();cout << "-- Array m*n: --" << endl << result << endl << endl;result = m.cwiseProduct(n);cout << "-- With cwiseProduct: --" << endl << result << endl << endl;result = m.array() + 4;cout << "-- Array m + 4: --" << endl << result << endl << endl;}

输出

-- Matrix m*n: --

19 22

43 50

 

-- Array m*n: --

 5 12

21 32

 

-- With cwiseProduct: --

 5 12

21 32

 

-- Array m + 4: --

5 6

7 8

类似, array1.matrix() * array2.matrix() 将执行矩阵乘法。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

装饰信封

有时 很多时候&#xff0c;我需要一个类实现通过使其他类的实例的接口。 听起来很奇怪&#xff1f; 让我给你看一个例子。 在Takes框架中有很多此类&#xff0c;它们的名称都都类似于*Wrap 。 这是一个方便的设计概念&#xff0c;不幸的是&#xff0c;在Java中看起来相当冗长。…

进制转换c语言代码_奇怪的C语言代码,有些函数在变量前加上(void)是什么类型转换?...

C语言的语法极其简洁&#xff0c;即使是初次接触编程语言的初学者也能很快学完它的语法。不过&#xff0c;C语言也是一门“灵活得过了头”的编程语言&#xff0c;对于很多初学者来说&#xff0c;编写C语言程序就好像拿着一堆最基本的砖块&#xff0c;要修建一座大厦一样&#x…

Eigen(4)矩阵基本运算

矩阵和向量的运算 提供一些概述和细节&#xff1a;关于矩阵、向量以及标量的运算。 1. 介绍 Eigen提供了matrix/vector的运算操作&#xff0c;既包括重载了c的算术运算符/-/*&#xff0c;也引入了一些特殊的运算比如点乘dot、叉乘cross等。 对于Matrix类&#xff08;matrix和v…

beta冲刺(1/7)

作业格式 课程名称&#xff1a;软件工程1916|W&#xff08;福州大学&#xff09;作业要求&#xff1a;项目beta冲刺&#xff08;团队&#xff09;团队名称&#xff1a; 那周余嘉熊掌将得队作业目标&#xff1a;beta&#xff08;1/7&#xff09;队员学号队员姓名博客地址备注221…

qq纵横四海源码_【0基础】纵横中文网python爬虫实战

原文在此~【0基础】纵横中文网python爬虫实战​mp.weixin.qq.com大家好&#xff0c;我是你们的机房老哥&#xff01;在粉丝群的日常交流中&#xff0c;爬虫是比较常见的话题。python最强大的功能之一也是爬虫。考虑到很多0基础的小白想要入门爬虫。老哥今天就通过一个比较简单的…

Eigen(3)矩阵Matrix及其简单操作

1. Matrix类 在Eigen&#xff0c;所有的矩阵和向量都是Matrix模板类的对象&#xff0c;Vector只是一种特殊的矩阵&#xff08;一行或者一列&#xff09;。 Matrix有6个模板参数&#xff0c;主要使用前三个参数&#xff0c;剩下的有默认值。 Matrix<typename Scalar, int Ro…

java jquery_jQuery数据表和Java集成

java jqueryjQuery DataTables是一个开放源代码插件&#xff0c;用于在浏览器中创建表。 它具有许多功能&#xff0c;例如排序&#xff0c;服务器端处理&#xff0c; JQUERY UI主题滚动。 该插件的下载链接&#xff1a; http://www.datatables.net/download/ 在本演示中&am…

Eigen(2) 模块与头文件

Eigen库被分为一个Core模块和其他一些模块&#xff0c;每个模块有一些相应的头文件。 为了便于引用&#xff0c;Dense模块整合了一系列模块&#xff1b;Eigen模块整合了所有模块。一般情况下&#xff0c;include<Eigen/Dense> 就够了

白鹭龙骨异步加载

private armatureDisplay: dragonBones.EgretArmatureDisplay; /** * 加载龙骨动画 * Create scene interface */ private loadGragon(): void { let t this; t.removeGragon(); //默认男战士 let sex t.occupationSex.selectedValue ? t.occupationSex.selectedValue : 1; …

zip和unzip上的Java要点

压缩是编写文件时可以在我们的代码中发出的主要动作之一。 因此&#xff0c;我发现在zip和unzip上必不可少的简单Java代码段&#xff0c;并且必须易于访问。 要点是纯Java语言&#xff0c;并以zip格式存储两个文件。 完成后&#xff0c;打开打开的拉链并评估其内容。 import …

ppt图片丢失_041 职场PPT实战:做好的PPT换个电脑就丢字体?三招解决!

大家好&#xff0c;我是肥宅。这是《职场PPT实战》系列更文的第41篇。本期我要跟大家聊一个很实在的问题&#xff0c;字体嵌入。有小伙伴在后台提问&#xff0c;他是这么说的&#xff1a;“肥宅老师&#xff0c;我做好的PPT&#xff0c;换个电脑打开字体就变了&#xff0c;有没…

matlab sort对矩阵某一维进行排序并记录之前索引

sort函数默认升序排列&#xff0c;即‘ascend’&#xff1b; [B, index] sort(A&#xff0c;dim&#xff0c; model) B为排序后矩阵 index记录排序前的索引号 A需要进行排序操作的矩阵 dim对矩阵的维度&#xff08;一维不用指定&#xff0c;二维默认对列&#xff09; mode…

2018-2019-2 20165221 【网络对抗技术】-- Exp9 Web安全基础

2018-2019-2 20165221 【网络对抗技术】-- Exp9 Web安全基础 目录&#xff1a; 一 . 实验要求二 . 实验过程记录 1 . Webgoat安装2 . SQL注入的攻击 命令注入&#xff08;Command Injection&#xff09;数字型注入&#xff08;Numeric SQL Injection&#xff09;日志欺骗&#…

python不同目录调用_python3 不同目录间模块调用

#Author by Andy#_*_ coding:utf-8 _*_#__file__获取当前程序的相对路径import os,sys#print(__file__)# os.path.abspath(__file__) 获取当前程序的绝对路径print(os.path.abspath(__file__))# E:\my python study\day4\Atm\bin\atm.pyPathos.path.abspath(__file__)# print(o…

python 安装虚拟环境virtualenv

1.sudo apt install virtualenv 安装失败 2.sudo apt-get update 更新失败 提示&#xff1a; E: 仓库 “http://mirrors.aliyun.com/ubuntu artful Release” 不再含有 Release 文件。N: 无法安全地用该源进行更新&#xff0c;所以默认禁用该源。N: 参见 apt-secure(8) 手册以了…

python内存管理_Python内存管理(一):预备知识

一、内存的理解你可以将计算机中的内存理解为一本为短期存储而设计的书。这本书中现在什么都没写&#xff0c;但最终不同的“作者”会来寻求空间&#xff0c;写入他们想写的故事。由于他们之间不能彼此覆盖&#xff0c;他们在开始写入之前一定要向这本书的管理者申请&#xff0…

javacv 人脸检测_使用JavaCV进行手和手指检测

javacv 人脸检测这篇文章是Andrew Davison博士发布的有关自然用户界面&#xff08;NUI&#xff09;系列的一部分&#xff0c;内容涉及使用JavaCV从网络摄像头视频提要中检测手。 注意&#xff1a;本章的所有源代码都可以从http://fivedots.coe.psu.ac.th/~ad/jg/nui055/下载。…

vector赋值的常见错误

易范错误1&#xff1a; vector<int> a; for (int i 0; i<10; i) a[i] i; //这种做法以及类似的做法都是错误的。下标只能用于获取已存在的元素&#xff0c;而现在的a[i]还是空的对象 正确做法1&#xff1a; vector<int> a; for (int i 0; i<10; i) a&…

python的pandas库中如何计算每列出现最多的值_Python Pandas中根据列的值选取多行数据...

Pandas中根据列的值选取多行数据# 选取等于某些值的行记录 用 df.loc[df[column_name] some_value]# 选取某列是否是某一类型的数值 用 isindf.loc[df[column_name].isin(some_values)]# 多种条件的选取 用 &df.loc[(df[column] some_value) & df[other_column].isin…

补码运算。

一.补码加法。 先求出两个数的补码。补码相加。最后的结果为补码&#xff0c;若要取得真值需再次求补。超过模的进位需丢掉。二.补码减法。 三.溢出检测 转载于:https://www.cnblogs.com/Ravenzzz/p/10930014.html