日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Eigen入门之密集矩阵 5 - 再谈Matrix初始化

發(fā)布時間:2023/12/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Eigen入门之密集矩阵 5 - 再谈Matrix初始化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡介

這里將討論一下高級些的矩陣初始化方法。

comma-initializer

逗號初始化器 comma-initializer方法很簡單,可以一下把矩陣/向量的系數(shù)全部設(shè)置完。語法很簡單,使用逗號分隔每個系數(shù)。前面的介紹文檔中已經(jīng)多次使用了。只是要求在前面定義對象時,要知道矩陣/向量的維度和大小,賦值時注意數(shù)量要匹配。

而且,在初始化時,逗號分隔的對象可以時矩陣或者向量。

結(jié)合前面介紹的各種操作,綜合示例:

//matrix_initial1.cpp #include <Eigen/Dense> #include <iostream>using namespace std; using namespace Eigen;int main() {RowVectorXd vec1(3);vec1 << 1, 2, 3;cout << "vec1 = " << vec1 << endl;RowVectorXd vec2(4);vec2 << 1, 4, 9, 16;cout << "vec2 = " << vec2 << endl;RowVectorXd joined(7);joined << vec1, vec2;cout << "joined = " << joined << endl;cout << "-----------------------" << endl;MatrixXf m(3,3);m << 1,2,3,4,5,6,7,8,9;cout << "Here is the initialed matrix m:" << endl << m << endl;//Matrix3f mf;mf.row(0) << 1, 2, 3;mf.block(1,0,2,2) << 4, 5, 7, 8;mf.col(2).tail(2) << 6, 9; cout << "Here is the other initialed matrix mf:" << endl << mf << endl;}

執(zhí)行:

$ g++ -I /usr/local/include/eigen3 matrix_initial1.cpp -o matrix_initial1 $ $ ./matrix_initial1 vec1 = 1 2 3 vec2 = 1 4 9 16 joined = 1 2 3 1 4 9 16 ----------------------- Here is the initialed matrix m: 1 2 3 4 5 6 7 8 9 Here is the other initialed matrix mf: 1 2 3 4 5 6 7 8 9

特別的矩陣和數(shù)組

Zero

Eigen內(nèi)的Matrix和Array類有一些特殊的方法,比如Zero(),可以把所有的系數(shù)初始化為0。
zero方法有3中變體:

  • 對固定尺寸大小的對象:不需要參數(shù),如直接Array33f a = matrix3f.Zero();
  • 對動態(tài)尺寸大小的一維對象:需要一個參數(shù)。如ArrayXf a = ArrayXf::Zero(3);
  • 對動態(tài)尺寸大小的二維對象: 需要2個參數(shù)。如ArrayXXf a = ArrayXXf::Zero(3, 4);

Constant & Random

類似于zero,靜態(tài)static方法Constant(value)將把所有的系數(shù)設(shè)置為指定的value值。如果要指定尺寸大小,則使用MatrixXd::Constant(rows, cols, value).初始化時指定尺寸。

而Random會將對象填充隨機值。

單位矩陣Identity & LinSpaced

單位矩陣,顧名思義,只是產(chǎn)生矩陣的。
而 LinSpaced(size, low, high) ,只用于向量vector或者一維的Array數(shù)組。它會使用low到high之間的值,按照size,平均數(shù)值間距,得到各個系數(shù),創(chuàng)建向量/數(shù)組。

其他輔助方法

Eigen定義了輔助方法,用于上述的方法的對應(yīng)方法: setZero(), MatrixBase::setIdentity() and DenseBase::setLinSpaced() to do this conveniently.。

示例

請參考示例。

//matrix_initial3.cpp#include <Eigen/Dense> #include <iostream>using namespace std; using namespace Eigen;int main() {// ArrayXXf table(10, 4);table.col(0) = ArrayXf::LinSpaced(10, 0, 99);table.col(1) = M_PI / 180 * table.col(0);table.col(2) = table.col(1).sin();table.col(3) = table.col(1).cos();cout << " Degrees Radians Sine Cosine\n";cout << table << endl;//cout << "-------------------------------" << endl;// 快捷方法const int size = 6;MatrixXd mat1(size, size);mat1.topLeftCorner(size/2, size/2) = MatrixXd::Zero(size/2, size/2);mat1.topRightCorner(size/2, size/2) = MatrixXd::Identity(size/2, size/2);mat1.bottomLeftCorner(size/2, size/2) = MatrixXd::Identity(size/2, size/2);mat1.bottomRightCorner(size/2, size/2) = MatrixXd::Zero(size/2, size/2);cout << " mat1 "<< endl;cout << mat1 << endl << endl;// 輔助方法MatrixXd mat2(size, size);mat2.topLeftCorner(size/2, size/2).setZero();mat2.topRightCorner(size/2, size/2).setIdentity();mat2.bottomLeftCorner(size/2, size/2).setIdentity();mat2.bottomRightCorner(size/2, size/2).setZero();cout << " mat2 "<< endl;cout << mat2 << endl << endl;// MatrixXd mat3(size, size);mat3 << MatrixXd::Zero(size/2, size/2), MatrixXd::Identity(size/2, size/2),MatrixXd::Identity(size/2, size/2), MatrixXd::Zero(size/2, size/2);cout << " mat3 "<< endl;cout << mat3 << endl;}

執(zhí)行結(jié)果:

$ g++ -I /usr/local/include/eigen3 matrix_initial3.cpp -o matrix_initial3 $ $ ./matrix_initial3Degrees Radians Sine Cosine0 0 0 111 0.191986 0.190809 0.98162722 0.383972 0.374607 0.92718433 0.575959 0.544639 0.83867144 0.767945 0.694658 0.7193455 0.959931 0.819152 0.57357666 1.15192 0.913545 0.40673777 1.3439 0.97437 0.22495188 1.53589 0.999391 0.034899599 1.72788 0.987688 -0.156434 -------------------------------mat1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0mat2 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0mat3 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0

臨時對象及Finish()

在上面的示例,Zero() , Constant() 可以在聲明一個便利時,初始化對象; 也可以作為右值用來做賦值操作。看起來,好像它們會返回一個對象(矩陣或者數(shù)組)。但實際上,它們返回的是一個表達(dá)式對象(expression object),然后在需要時,才會對該表達(dá)式進(jìn)行求值。這樣對性能不會產(chǎn)生什么不好的影響。在前面的示例中,也有這樣的情況。
比如代碼:

MatrixXd m = MatrixXd::Random(3,3); m = (m + MatrixXd::Constant(3,3,1.2))*10;

代碼中的m + MatrixXd::Constant(3,3,1.2),創(chuàng)建了一個3X3的,系數(shù)都為1.2的常量矩陣,這時為express-object,在和m進(jìn)行矩陣加法運算時,才會真正求職計算。

而下面的逗號初始化器使用也是如此,其構(gòu)造了一個臨時對象,是一個2X3的隨機矩陣,然后在輸出時,被求值得到結(jié)果。最重要的是mat = (MatrixXf(2,2) << 0, 1, 1, 0).finished() * mat;,在里面有一個反對角單位矩陣:KaTeX parse error: No such environment: smallmatrix at position 14: \bigl[ \begin{?s?m?a?l?l?m?a?t?r?i?x?}? 0 & 1 \\ 1 & 0…。這里的.finish()是必須的,表示需要對表達(dá)式對象進(jìn)行求值。

這是一個2X2的單位對角矩陣乘以2X3的矩陣:

//matrix_initial4.cpp #include <Eigen/Dense> #include <iostream>using namespace std; using namespace Eigen;int main() {// random matrix.MatrixXf mat = MatrixXf::Random(2, 3);std::cout <<" random matrix: " << endl << mat << std::endl << std::endl;////mat = (MatrixXf(2,2) << 0, 1, 1, 0) * mat; // compile error: invalid operands to binary expressionmat = (MatrixXf(2,2) << 0, 1, 1, 0).finished() * mat;std::cout << " new matrix: " << endl << mat << std::endl; }

執(zhí)行結(jié)果:

$ g++ -I /usr/local/include/eigen3 matrix_initial4.cpp -o matrix_initial4 $ $ ./matrix_initial4random matrix: -0.999984 0.511211 0.0655345-0.736924 -0.0826997 -0.562082new matrix: -0.736924 -0.0826997 -0.562082-0.999984 0.511211 0.0655345

總結(jié)

以上是生活随笔為你收集整理的Eigen入门之密集矩阵 5 - 再谈Matrix初始化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩免费网站 | 中文字幕电影一区二区 | 日韩的一区二区 | 婷婷导航| 一区二区视频免费在线观看 | 黄色性生活一级片 | 成人二三区 | www噜噜噜 | 色综合一区| 毛片无遮挡高清免费观看 | 欧美成人精品在线观看 | 日本二区三区视频 | 免费一级黄色 | 日本强好片久久久久久aaa | 芭乐视频色 | 欧美一本在线 | 欧美午夜在线视频 | 久久久久久国产精品三区 | 国产美女主播在线 | 国产伦精品一区二区三区四区免费 | 欧美精品一 | 国产高清视频网站 | 99精品乱码国产在线观看 | 欧美专区综合 | 91视频 - 88av| 亚洲jizzjizz | 午夜视频福利网站 | 中文字幕一区二区三区波野结 | 精品影视 | 夜夜操天天射 | 欧美性欧美zzzzzzzzz | 亚洲AV无码乱码国产精品牛牛 | 香蕉综合视频 | 天堂久久av | 天天色天天搞 | 天堂av在线免费观看 | 色婷婷久久一区二区三区麻豆 | 狼人伊人干 | 成人看| 午夜在线视频免费观看 | 日韩在线三级 | 欧美极品在线播放 | 亚洲少妇色 | 精品蜜桃一区二区三区 | 91在线| 已满18岁免费观看电视连续剧 | 99riav1国产精品视频 | 国内精品视频一区二区三区 | 日本女人性视频 | 日本丰满少妇一区二区三区 | 免费黄色av片 | 亚洲人午夜精品 | 69人人| 重囗味sm一区二区三区 | 日本一区三区 | 初高中福利视频网站 | 热逼视频 | 伊人春色在线 | 日本韩国免费观看 | 久久综合国产精品 | 色婷婷av一区二区三区在线观看 | 亚洲AV无码成人精品一区 | 久久久久久夜 | 久久中文字幕人妻熟av女蜜柚m | 成人黄色在线视频 | 天天影视色 | 日日干,夜夜操 | 久久波多野结衣 | 欧美一区三区三区高中清蜜桃 | 黄色三级在线观看 | 日韩一区高清 | 口述3p做爰全过程 | 青青自拍视频 | 涩涩精品| 亚洲视频中文字幕 | 成人国产精品免费 | 色婷婷导航 | 成人三级在线视频 | 亚洲国产精品久久久久 | 香蕉久久久久久久av网站 | 免费看片色 | 免费se99se | 熟女俱乐部一区二区视频在线 | 国产精品免费精品一区 | 一二三四国产精品 | 精品国产一二三四区 | juliaann第一次和老师 | 国产69精品久久久 | 日韩成人一区二区视频 | 久久久夜夜 | 91精品国产色综合久久不卡电影 | japanese国产在线观看 | 久久久久影视 | 男女性杂交内射妇女bbwxz | 日韩福利视频 | 日韩毛片网站 | 香蕉视频网页 | 久久久精品影院 | 一区二区久久久 |