{"id":1619,"date":"2025-03-24T08:50:14","date_gmt":"2025-03-23T23:50:14","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=1619"},"modified":"2025-03-24T08:50:14","modified_gmt":"2025-03-23T23:50:14","slug":"%e3%80%90%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%e3%80%91eigen%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa%e3%81%a7%e5%ae%9f%e7%8f%be%e3%81%99%e3%82%8b%e9%ab%98%e9%80%9f%e8%a1%8c%e5%88%97","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=1619","title":{"rendered":"\u3010\u5b8c\u5168\u30ac\u30a4\u30c9\u3011Eigen\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u5b9f\u73fe\u3059\u308b\u9ad8\u901f\u884c\u5217\u8a08\u7b97\u5165\u9580 \u301c\u5b9f\u8df5\u7684\u306a\u5b9f\u88c5\u4f8b15\u9078\u4ed8\u304d\u301c"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">Eigen\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u306f\uff1a\u9ad8\u6027\u80fd\u306a\u884c\u5217\u8a08\u7b97\u3092\u5b9f\u73fe\u3059\u308bC++\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30e9\u30a4\u30d6\u30e9\u30ea<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">\u79d1\u5b66\u8a08\u7b97\u3068\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30d3\u30b8\u30e7\u30f3\u306e\u30c7\u30d5\u30a1\u30af\u30c8\u6a19\u6e96<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u3067\u6d3b\u767a\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u3088\u308b\u7d99\u7d9a\u7684\u306a\u6539\u5584<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">Eigen\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u7279\u5fb4\u3068\u5229\u70b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d9\u30fc\u30b9\u306e\u76f4\u611f\u7684\u306aAPI\u8a2d\u8a08<\/a>      <\/li>      <li>        <a href=\"#i-5\">\u6700\u9069\u5316\u3055\u308c\u305f\u9ad8\u901f\u306a\u8a08\u7b97\u51e6\u7406<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-6\">\u8c4a\u5bcc\u306a\u7dda\u5f62\u4ee3\u6570\u6f14\u7b97\u306e\u30b5\u30dd\u30fc\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-7\">\u74b0\u5883\u69cb\u7bc9\u304b\u3089\u59cb\u3081\u308bEigen\u5165\u9580<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-8\">\u5404OS\u5411\u3051\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806<\/a>      <\/li>      <li>        <a href=\"#i-12\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u5c0e\u5165\u65b9\u6cd5\u3068CMake\u306e\u8a2d\u5b9a<\/a>      <\/li>      <li>        <a href=\"#i-15\">\u57fa\u672c\u7684\u306a\u30d3\u30eb\u30c9\u8a2d\u5b9a\u3068\u30b3\u30f3\u30d1\u30a4\u30eb\u30aa\u30d7\u30b7\u30e7\u30f3<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-19\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-20\">\u5b9f\u8df5\u7684\u306a\u884c\u5217\u8a08\u7b97\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-21\">\u57fa\u672c\u7684\u306a\u884c\u5217\u64cd\u4f5c\u3068\u6f14\u7b97\u306e\u4f7f\u3044\u65b9<\/a>      <\/li>      <li>        <a href=\"#i-25\">\u758e\u884c\u5217\u306e\u52b9\u7387\u7684\u306a\u51e6\u7406\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li>        <a href=\"#i-28\">\u30d1\u30e9\u30e1\u30fc\u30bf\u8a08\u7b97\u306b\u3088\u308b\u51e6\u7406\u306e\u9ad8\u901f\u5316<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-32\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-33\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-34\">\u30e1\u30e2\u30ea\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u306e\u6700\u9069\u5316\u624b\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-38\">\u30ad\u30e3\u30c3\u30b7\u30e5\u52b9\u7387\u3092\u8003\u616e\u3057\u305f\u30c7\u30fc\u30bf\u69cb\u9020\u8a2d\u8a08<\/a>      <\/li>      <li>        <a href=\"#i-41\">SIMD\u30b3\u30de\u30f3\u30c9\u3092\u6d3b\u7528\u3057\u305f\u8a08\u7b97\u306e\u9ad8\u901f\u5316<\/a>      <\/li>      <li>        <a href=\"#i-44\">\u6700\u9069\u5316\u52b9\u679c\u306e\u6bd4\u8f03<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-45\">\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u4e00\u89a7<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-46\">\u5b9f\u8df5\u7684\u306a\u5b9f\u88c5\u4f8b15\u9078<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-47\">\u753b\u50cf\u51e6\u7406\u3067\u306e\u884c\u5217\u6f14\u7b97\u306e\u6d3b\u7528\u4f8b<\/a>      <\/li>      <li>        <a href=\"#i-51\">3D\u8a8d\u8b58\u3068\u59ff\u52e2\u63a8\u5b9a\u306e\u5b9f\u8df5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-54\">\u6a5f\u68b0\u5b66\u7fd2\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u306e\u5229\u7528\u4f8b<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-58\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30c7\u30d0\u30c3\u30b0\u306e\u30b3\u30c4<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-59\">\u3088\u304f\u3042\u308b\u30b3\u30f3\u30d1\u30a4\u30eb\u30a8\u30e9\u30fc\u306e\u89e3\u6c7a\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-63\">\u5b9f\u884c\u6642\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u554f\u984c\u3078\u306e\u5bfe\u51e6<\/a>      <\/li>      <li>        <a href=\"#i-66\">\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u9632\u6b62\u3068\u5bfe\u7b56<\/a>      <\/li>      <li>        <a href=\"#i-69\">\u30c7\u30d0\u30c3\u30b0\u306e\u305f\u3081\u306e\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-70\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-71\">Eigen\u306e\u767a\u5c55\u7684\u306a\u4f7f\u3044\u65b9\u3068\u5c06\u6765\u5c55\u671b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-72\">\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u306e\u6539\u5584\u70b9\u3068\u65b0\u6a5f\u80fd<\/a>      <\/li>      <li>        <a href=\"#i-75\">\u5927\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u6d3b\u7528\u4e8b\u4f8b<\/a>      <\/li>      <li>        <a href=\"#i-76\">\u4eca\u5f8c\u306e\u958b\u767a\u30ed\u30fc\u30c9\u30de\u30c3\u30d7<\/a>      <\/li>      <li>        <a href=\"#i-77\">\u5c06\u6765\u306e\u6280\u8853\u30c8\u30ec\u30f3\u30c9\u3068\u306e\u95a2\u4fc2<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-78\">\u6280\u8853\u7684\u306a\u767a\u5c55\u306e\u65b9\u5411\u6027<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">Eigen\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u306f\uff1a\u9ad8\u6027\u80fd\u306a\u884c\u5217\u8a08\u7b97\u3092\u5b9f\u73fe\u3059\u308bC++\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30e9\u30a4\u30d6\u30e9\u30ea<\/h2>\n\n\n\n<p>Eigen\u306f\u3001\u7dda\u5f62\u4ee3\u6570\u3001\u884c\u5217\u3001\u30d9\u30af\u30c8\u30eb\u3001\u6570\u5024\u30bd\u30eb\u30d0\u30fc\u3001\u304a\u3088\u3073\u95a2\u9023\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u305f\u3081\u306e\u9ad8\u6027\u80fd\u306aC++\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3059\u30022006\u5e74\u306bBeno\u00eet Jacob\u306b\u3088\u3063\u3066\u958b\u767a\u304c\u958b\u59cb\u3055\u308c\u3001\u73fe\u5728\u306fKDE\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4e00\u90e8\u3068\u3057\u3066\u6d3b\u767a\u306b\u958b\u767a\u304c\u7d9a\u3051\u3089\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">\u79d1\u5b66\u8a08\u7b97\u3068\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30d3\u30b8\u30e7\u30f3\u306e\u30c7\u30d5\u30a1\u30af\u30c8\u6a19\u6e96<\/h3>\n\n\n\n<p>Eigen\u306f\u3001\u305d\u306e\u9ad8\u3044\u6027\u80fd\u3068\u4f7f\u3044\u3084\u3059\u3055\u304b\u3089\u3001\u4ee5\u4e0b\u306e\u5206\u91ce\u3067\u5e83\u304f\u63a1\u7528\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u79d1\u5b66\u6280\u8853\u8a08\u7b97<\/strong><\/li>\n\n\n\n<li>\u6570\u5024\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>\u7269\u7406\u30a8\u30f3\u30b8\u30f3<\/li>\n\n\n\n<li>\u4fe1\u53f7\u51e6\u7406\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li><strong>\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30d3\u30b8\u30e7\u30f3<\/strong><\/li>\n\n\n\n<li>OpenCV\u30e9\u30a4\u30d6\u30e9\u30ea\uff08\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u63a1\u7528\uff09<\/li>\n\n\n\n<li>\u753b\u50cf\u51e6\u7406\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>3D graphics \u30a8\u30f3\u30b8\u30f3<\/li>\n\n\n\n<li><strong>\u6a5f\u68b0\u5b66\u7fd2<\/strong><\/li>\n\n\n\n<li>TensorFlow\uff08\u884c\u5217\u6f14\u7b97\u306e\u57fa\u76e4\u3068\u3057\u3066\u4f7f\u7528\uff09<\/li>\n\n\n\n<li>\u7d71\u8a08\u89e3\u6790\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2<\/li>\n\n\n\n<li>\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/li>\n<\/ul>\n\n\n\n<p>\u5b9f\u969b\u306e\u4f7f\u7528\u4f8b\u3092\u7c21\u5358\u306b\u793a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Eigen\/Dense&gt;\nusing namespace Eigen;\n\n\/\/ \u57fa\u672c\u7684\u306a\u884c\u5217\u6f14\u7b97\u306e\u4f8b\nMatrix3d m = Matrix3d::Random();   \/\/ 3x3\u306e\u30e9\u30f3\u30c0\u30e0\u884c\u5217\u3092\u751f\u6210\nVector3d v(1,2,3);                \/\/ 3\u6b21\u5143\u30d9\u30af\u30c8\u30eb\u3092\u751f\u6210\n\n\/\/ \u884c\u5217\u3068\u30d9\u30af\u30c8\u30eb\u306e\u6f14\u7b97\nVector3d result = m * v;          \/\/ \u884c\u5217\u3068\u30d9\u30af\u30c8\u30eb\u306e\u7a4d\n\n\/\/ \u884c\u5217\u306e\u57fa\u672c\u64cd\u4f5c\nMatrix3d trans = m.transpose();    \/\/ \u8ee2\u7f6e\u884c\u5217\ndouble det = m.determinant();      \/\/ \u884c\u5217\u5f0f<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u3067\u6d3b\u767a\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u3088\u308b\u7d99\u7d9a\u7684\u306a\u6539\u5584<\/h3>\n\n\n\n<p>Eigen\u306e\u958b\u767a\u306f\u3001\u4ee5\u4e0b\u306e\u7279\u5fb4\u3092\u6301\u3064\u6d3b\u767a\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u3088\u3063\u3066\u652f\u3048\u3089\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u7d99\u7d9a\u7684\u306a\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SIMD\u30d9\u30af\u30c8\u30eb\u5316\u306e\u6539\u5584<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u52b9\u7387\u306e\u5411\u4e0a<\/li>\n\n\n\n<li>\u65b0\u3057\u3044CPU\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3078\u306e\u5bfe\u5fdc<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5145\u5b9f\u3057\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8a73\u7d30\u306aAPI\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9<\/li>\n\n\n\n<li>\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3068\u4f8b\u984c<\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u54c1\u8cea\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5e83\u7bc4\u306a\u5358\u4f53\u30c6\u30b9\u30c8<\/li>\n\n\n\n<li>\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u30b9\u30a4\u30fc\u30c8<\/li>\n\n\n\n<li>CI\u306b\u3088\u308b\u81ea\u52d5\u30c6\u30b9\u30c8<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b89\u5b9a\u7248\u306e\u30ea\u30ea\u30fc\u30b9\u30b5\u30a4\u30af\u30eb<\/li>\n\n\n\n<li>\u4e0b\u4f4d\u4e92\u63db\u6027\u306e\u7dad\u6301<\/li>\n\n\n\n<li>\u30d0\u30b0\u4fee\u6b63\u306e\u8fc5\u901f\u306a\u63d0\u4f9b<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<p><strong>\u4e3b\u8981\u306a\u7af6\u5408\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u306e\u6bd4\u8f03<\/strong><\/p>\n\n\n<div id=\"id-433c6444-23e6-4aa1-a5b7-82eda1322f5a\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u7279\u5fb4<\/th><th>Eigen<\/th><th>Armadillo<\/th><th>Blaze<\/th><\/tr><\/thead><tbody><tr><td>\u4f9d\u5b58\u95a2\u4fc2<\/td><td>\u30d8\u30c3\u30c0\u30aa\u30f3\u30ea\u30fc<\/td><td>BLAS\/LAPACK\u5fc5\u8981<\/td><td>\u30aa\u30d7\u30b7\u30e7\u30ca\u30eb<\/td><\/tr><tr><td>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u6d3b\u7528<\/td><td>\u25ce<\/td><td>\u25cb<\/td><td>\u25ce<\/td><\/tr><tr><td>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u5bb9\u6613\u6027<\/td><td>\u25ce<\/td><td>\u25b3<\/td><td>\u25cb<\/td><\/tr><tr><td>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u5145\u5b9f\u5ea6<\/td><td>\u25ce<\/td><td>\u25cb<\/td><td>\u25cb<\/td><\/tr><tr><td>\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u898f\u6a21<\/td><td>\u5927<\/td><td>\u4e2d<\/td><td>\u4e2d<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>Eigen\u306f\u3001\u9ad8\u6027\u80fd\u306a\u884c\u5217\u8a08\u7b97\u3092\u5fc5\u8981\u3068\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u304a\u3044\u3066\u3001\u305d\u306e\u4f7f\u3044\u3084\u3059\u3055\u3001\u5145\u5b9f\u3057\u305f\u6a5f\u80fd\u3001\u305d\u3057\u3066\u6d3b\u767a\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8\u306b\u3088\u308a\u3001\u6700\u3082\u4fe1\u983c\u3067\u304d\u308b\u9078\u629e\u80a2\u306e\u4e00\u3064\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">Eigen\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u7279\u5fb4\u3068\u5229\u70b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d9\u30fc\u30b9\u306e\u76f4\u611f\u7684\u306aAPI\u8a2d\u8a08<\/h3>\n\n\n\n<p>Eigen\u306e\u6700\u5927\u306e\u7279\u5fb4\u306f\u3001C++\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30e1\u30bf\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3092\u6d3b\u7528\u3057\u305f\u76f4\u611f\u7684\u306aAPI\u8a2d\u8a08\u306b\u3042\u308a\u307e\u3059\u3002\u6570\u5b66\u7684\u306a\u8868\u73fe\u3092\u305d\u306e\u307e\u307e\u30b3\u30fc\u30c9\u3067\u8868\u73fe\u3067\u304d\u308b\u305f\u3081\u3001\u53ef\u8aad\u6027\u304c\u9ad8\u304f\u3001\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u306b\u512a\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Eigen\/Dense&gt;\nusing namespace Eigen;\n\n\/\/ \u884c\u5217\u306e\u5ba3\u8a00\u3068\u521d\u671f\u5316\nMatrix3d A = Matrix3d::Identity();  \/\/ 3x3\u306e\u5358\u4f4d\u884c\u5217\nVector3d v(1.0, 2.0, 3.0);         \/\/ 3\u6b21\u5143\u30d9\u30af\u30c8\u30eb\n\n\/\/ \u76f4\u611f\u7684\u306a\u6f14\u7b97\u5b50\u3067\u306e\u884c\u5217\u8a08\u7b97\nMatrix3d B = 2.0 * A;               \/\/ \u30b9\u30ab\u30e9\u30fc\u500d\nVector3d result = A * v;            \/\/ \u884c\u5217\u3068\u30d9\u30af\u30c8\u30eb\u306e\u7a4d\n\n\/\/ \u30e1\u30bd\u30c3\u30c9\u30c1\u30a7\u30fc\u30f3\u306b\u3088\u308b\u8907\u96d1\u306a\u64cd\u4f5c\nMatrix3d C = A.inverse()            \/\/ \u9006\u884c\u5217\n             .transpose()           \/\/ \u8ee2\u7f6e\n             .triangularView&lt;Upper&gt;();  \/\/ \u4e0a\u4e09\u89d2\u90e8\u5206\u306e\u53d6\u308a\u51fa\u3057<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u6700\u9069\u5316\u3055\u308c\u305f\u9ad8\u901f\u306a\u8a08\u7b97\u51e6\u7406<\/h3>\n\n\n\n<p>Eigen\u306f\u4ee5\u4e0b\u306e\u6700\u9069\u5316\u6a5f\u69cb\u306b\u3088\u308a\u3001\u9ad8\u901f\u306a\u8a08\u7b97\u51e6\u7406\u3092\u5b9f\u73fe\u3057\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u5f0f\u306e\u30a4\u30f3\u30e9\u30a4\u30f3\u5c55\u958b<\/li>\n\n\n\n<li>\u30eb\u30fc\u30d7\u30a2\u30f3\u30ed\u30fc\u30ea\u30f3\u30b0<\/li>\n\n\n\n<li>\u6f14\u7b97\u9806\u5e8f\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b9f\u884c\u6642\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SIMD\u547d\u4ee4\u306e\u81ea\u52d5\u6d3b\u7528<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u30e1\u30e2\u30ea\u30ec\u30a4\u30a2\u30a6\u30c8<\/li>\n\n\n\n<li>\u30b9\u30ec\u30c3\u30c9\u4e26\u5217\u5316\uff08OpenMP\u5bfe\u5fdc\uff09<\/li>\n<\/ul>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6bd4\u8f03\uff08\u884c\u5217\u4e57\u7b97\u30013000\u00d73000\u306e\u5834\u5408\uff09\uff1a<\/p>\n\n\n<div id=\"id-5d123271-2b84-4494-ace9-0cdd3681b9be\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30e9\u30a4\u30d6\u30e9\u30ea<\/th><th>\u5b9f\u884c\u6642\u9593(ms)<\/th><th>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf(MB)<\/th><\/tr><\/thead><tbody><tr><td>Eigen<\/td><td>245<\/td><td>68.6<\/td><\/tr><tr><td>OpenBLAS<\/td><td>258<\/td><td>72.3<\/td><\/tr><tr><td>Intel MKL<\/td><td>241<\/td><td>71.8<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u8c4a\u5bcc\u306a\u7dda\u5f62\u4ee3\u6570\u6f14\u7b97\u306e\u30b5\u30dd\u30fc\u30c8<\/h3>\n\n\n\n<p>Eigen\u306f\u3001\u79d1\u5b66\u6280\u8853\u8a08\u7b97\u306b\u5fc5\u8981\u306a\u5e45\u5e83\u3044\u7dda\u5f62\u4ee3\u6570\u6f14\u7b97\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Eigen\/Dense&gt;\nusing namespace Eigen;\n\n\/\/ \u57fa\u672c\u7684\u306a\u884c\u5217\u5206\u89e3\nMatrix3d m = Matrix3d::Random();\nSelfAdjointEigenSolver&lt;Matrix3d&gt; eigensolver(m);  \/\/ \u56fa\u6709\u5024\u5206\u89e3\nHouseholderQR&lt;Matrix3d&gt; qr(m);                    \/\/ QR\u5206\u89e3\nLLT&lt;Matrix3d&gt; llt(m);                             \/\/ Cholesky\u5206\u89e3\n\n\/\/ \u7279\u6b8a\u306a\u884c\u5217\u64cd\u4f5c\nMatrix3d sparse = m.sparseView();           \/\/ \u758e\u884c\u5217\u3078\u306e\u5909\u63db\nMatrix3d block = m.block&lt;2,2&gt;(0,0);         \/\/ \u30d6\u30ed\u30c3\u30af\u884c\u5217\u306e\u62bd\u51fa\nMatrix3d rotated = m.rotate(AngleAxisd(M_PI\/4, Vector3d::UnitZ())); \/\/ \u56de\u8ee2\n\n\/\/ \u9ad8\u5ea6\u306a\u6570\u5024\u8a08\u7b97\nComplexEigenSolver&lt;Matrix3d&gt; ces(m);        \/\/ \u8907\u7d20\u56fa\u6709\u5024\u8a08\u7b97\nJacobiSVD&lt;Matrix3d&gt; svd(m);                \/\/ \u7279\u7570\u5024\u5206\u89e3<\/pre>\n\n\n\n<p>\u4e3b\u8981\u306a\u30b5\u30dd\u30fc\u30c8\u6a5f\u80fd\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u6f14\u7b97<\/strong><\/li>\n\n\n\n<li>\u884c\u5217\u306e\u52a0\u6e1b\u4e57\u9664<\/li>\n\n\n\n<li>\u30b9\u30ab\u30e9\u30fc\u6f14\u7b97<\/li>\n\n\n\n<li>\u8981\u7d20\u3054\u3068\u306e\u6f14\u7b97<\/li>\n\n\n\n<li><strong>\u884c\u5217\u5206\u89e3<\/strong><\/li>\n\n\n\n<li>LU\u5206\u89e3<\/li>\n\n\n\n<li>QR\u5206\u89e3<\/li>\n\n\n\n<li>Cholesky\u5206\u89e3<\/li>\n\n\n\n<li>\u7279\u7570\u5024\u5206\u89e3\uff08SVD\uff09<\/li>\n\n\n\n<li><strong>\u7279\u6b8a\u884c\u5217<\/strong><\/li>\n\n\n\n<li>\u758e\u884c\u5217<\/li>\n\n\n\n<li>\u5e2f\u884c\u5217<\/li>\n\n\n\n<li>\u30a8\u30eb\u30df\u30fc\u30c8\u884c\u5217<\/li>\n\n\n\n<li>\u4e09\u89d2\u884c\u5217<\/li>\n\n\n\n<li><strong>\u5e7e\u4f55\u5b66\u8a08\u7b97<\/strong><\/li>\n\n\n\n<li>\u5ea7\u6a19\u5909\u63db<\/li>\n\n\n\n<li>\u56de\u8ee2\u884c\u5217<\/li>\n\n\n\n<li>\u30af\u30a9\u30fc\u30bf\u30cb\u30aa\u30f3<\/li>\n\n\n\n<li>\u30a2\u30d5\u30a3\u30f3\u5909\u63db<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u7279\u5fb4\u306b\u3088\u308a\u3001Eigen\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5229\u70b9\u3092\u63d0\u4f9b\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u76f4\u611f\u7684\u306aAPI\u306b\u3088\u308b\u5b9f\u88c5\u306e\u5bb9\u6613\u3055<\/li>\n\n\n\n<li>\u8c4a\u5bcc\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9<\/li>\n\n\n\n<li>\u30c7\u30d0\u30c3\u30b0\u306e\u3057\u3084\u3059\u3055<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9ad8\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u6700\u9069\u5316\u306b\u3088\u308b\u9ad8\u901f\u5316<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u52b9\u7387\u306e\u826f\u3044\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u5bfe\u5fdc<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u67d4\u8edf\u306a\u62e1\u5f35\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ab\u30b9\u30bf\u30e0\u884c\u5217\u578b\u306e\u5b9a\u7fa9<\/li>\n\n\n\n<li>\u72ec\u81ea\u306e\u6f14\u7b97\u5b50\u306e\u8ffd\u52a0<\/li>\n\n\n\n<li>\u5916\u90e8\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u306e\u9023\u643a<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-7\">\u74b0\u5883\u69cb\u7bc9\u304b\u3089\u59cb\u3081\u308bEigen\u5165\u9580<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">\u5404OS\u5411\u3051\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-9\">Windows\u74b0\u5883<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u76f4\u63a5\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># GitHub\u304b\u3089\u30bd\u30fc\u30b9\u3092\u30af\u30ed\u30fc\u30f3\ngit clone https:\/\/gitlab.com\/libeigen\/eigen.git\n# \u307e\u305f\u306f\u516c\u5f0f\u30b5\u30a4\u30c8\u304b\u3089\u6700\u65b0\u7248\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>vcpkg\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">vcpkg install eigen3\nvcpkg integrate install<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>MSYS\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pacman -S mingw-w64-x86_64-eigen3<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-10\">Linux\u74b0\u5883<\/h4>\n\n\n\n<p><strong>Ubuntu\/Debian<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3092\u4f7f\u7528\nsudo apt-get update\nsudo apt-get install libeigen3-dev\n\n# \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u5148\u306e\u78ba\u8a8d\nls \/usr\/include\/eigen3<\/pre>\n\n\n\n<p><strong>CentOS\/RHEL<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo yum install eigen3-devel<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-11\">macOS\u74b0\u5883<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Homebrew\u3092\u4f7f\u7528\nbrew install eigen\n\n# \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u5148\u306e\u78ba\u8a8d\nls \/usr\/local\/include\/eigen3<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u5c0e\u5165\u65b9\u6cd5\u3068CMake\u306e\u8a2d\u5b9a<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-13\">\u57fa\u672c\u7684\u306aCMake\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cmake_minimum_required(VERSION 3.10)\nproject(MyEigenProject)\n\n# Eigen\u306e\u30d1\u30b9\u3092\u6307\u5b9a\nfind_package(Eigen3 3.3 REQUIRED NO_MODULE)\n\n# \u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210\nadd_executable(my_program main.cpp)\n\n# Eigen\u3092\u30ea\u30f3\u30af\ntarget_link_libraries(my_program Eigen3::Eigen)<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-14\">\u3088\u308a\u8a73\u7d30\u306aCMake\u8a2d\u5b9a\u4f8b<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30b3\u30f3\u30d1\u30a4\u30e9\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\n\n# \u6700\u9069\u5316\u30aa\u30d7\u30b7\u30e7\u30f3\nif(CMAKE_BUILD_TYPE STREQUAL \"Release\")\n    set(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} -O3 -DNDEBUG\")\nendif()\n\n# SIMD\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u6709\u52b9\u5316\nif(CMAKE_SYSTEM_PROCESSOR MATCHES \"x86_64|AMD64\")\n    set(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} -march=native\")\nendif()\n\n# OpenMP\u30b5\u30dd\u30fc\u30c8\u306e\u8ffd\u52a0\uff08\u30aa\u30d7\u30b7\u30e7\u30f3\uff09\nfind_package(OpenMP)\nif(OpenMP_CXX_FOUND)\n    target_link_libraries(my_program OpenMP::OpenMP_CXX)\nendif()<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">\u57fa\u672c\u7684\u306a\u30d3\u30eb\u30c9\u8a2d\u5b9a\u3068\u30b3\u30f3\u30d1\u30a4\u30eb\u30aa\u30d7\u30b7\u30e7\u30f3<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-16\">\u30b3\u30f3\u30d1\u30a4\u30e9\u30aa\u30d7\u30b7\u30e7\u30f3\u4e00\u89a7<\/h4>\n\n\n<div id=\"id-68e8f0f9-3cfd-4aff-b201-d57380370bdf\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30aa\u30d7\u30b7\u30e7\u30f3<\/th><th>\u8aac\u660e<\/th><th>\u63a8\u5968\u8a2d\u5b9a<\/th><\/tr><\/thead><tbody><tr><td>-march=native<\/td><td>CPU\u56fa\u6709\u306e\u6700\u9069\u5316\u3092\u6709\u52b9\u5316<\/td><td>Release\u7248\u3067\u63a8\u5968<\/td><\/tr><tr><td>-O3<\/td><td>\u6700\u9ad8\u30ec\u30d9\u30eb\u306e\u6700\u9069\u5316<\/td><td>Release\u7248\u3067\u5fc5\u9808<\/td><\/tr><tr><td>-DNDEBUG<\/td><td>\u30a2\u30b5\u30fc\u30b7\u30e7\u30f3\u3092\u7121\u52b9\u5316<\/td><td>Release\u7248\u3067\u63a8\u5968<\/td><\/tr><tr><td>-fopenmp<\/td><td>OpenMP\u306b\u3088\u308b\u4e26\u5217\u5316\u3092\u6709\u52b9\u5316<\/td><td>\u5fc5\u8981\u306b\u5fdc\u3058\u3066<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-17\">\u52d5\u4f5c\u78ba\u8a8d\u7528\u306e\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ main.cpp\n#include &lt;iostream&gt;\n#include &lt;Eigen\/Dense&gt;\n\nint main() {\n    \/\/ Eigen\u304c\u6b63\u3057\u304f\u52d5\u4f5c\u3059\u308b\u304b\u78ba\u8a8d\n    Eigen::Matrix3d m = Eigen::Matrix3d::Random();\n    Eigen::Vector3d v(1,0,0);\n\n    std::cout &lt;&lt; \"Matrix m:\\n\" &lt;&lt; m &lt;&lt; std::endl;\n    std::cout &lt;&lt; \"Vector v:\\n\" &lt;&lt; v &lt;&lt; std::endl;\n    std::cout &lt;&lt; \"m * v:\\n\" &lt;&lt; m * v &lt;&lt; std::endl;\n\n    return 0;\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-18\">\u30d3\u30eb\u30c9\u3068\u30c6\u30b9\u30c8\u5b9f\u884c<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d3\u30eb\u30c9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4f5c\u6210\u3068\u79fb\u52d5\nmkdir build &amp;&amp; cd build\n\n# CMake\u306e\u5b9f\u884c\ncmake ..\n\n# \u30d3\u30eb\u30c9\nmake\n\n# \u30c6\u30b9\u30c8\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5b9f\u884c\n.\/my_program<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h3>\n\n\n\n<p>\u4e00\u822c\u7684\u306a\u554f\u984c\u3068\u89e3\u6c7a\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Eigen\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CMakeLists.txt\u306b\u4ee5\u4e0b\u3092\u8ffd\u52a0\nset(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} \"path\/to\/eigen\")<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30b3\u30f3\u30d1\u30a4\u30eb\u30a8\u30e9\u30fc\u306e\u5834\u5408<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u30d1\u30b9\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30b3\u30f3\u30d1\u30a4\u30e9\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u78ba\u8a8d\uff08C++11\u4ee5\u4e0a\u304c\u5fc5\u8981\uff09<\/li>\n\n\n\n<li>\u5fc5\u8981\u306a\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb\u306e\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u554f\u984c<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30d1\u30a4\u30eb\u6700\u9069\u5316\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u8a2d\u5b9a\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>SIMD\u30b5\u30dd\u30fc\u30c8\u306e\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u8a2d\u5b9a\u3092\u9069\u5207\u306b\u884c\u3046\u3053\u3068\u3067\u3001Eigen\u3092\u52b9\u7387\u7684\u306b\u5229\u7528\u3059\u308b\u74b0\u5883\u304c\u6574\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-20\">\u5b9f\u8df5\u7684\u306a\u884c\u5217\u8a08\u7b97\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">\u57fa\u672c\u7684\u306a\u884c\u5217\u64cd\u4f5c\u3068\u6f14\u7b97\u306e\u4f7f\u3044\u65b9<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-22\">1. \u884c\u5217\u306e\u751f\u6210\u3068\u521d\u671f\u5316<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Eigen\/Dense&gt;\nusing namespace Eigen;\n\n\/\/ \u52d5\u7684\u30b5\u30a4\u30ba\u306e\u884c\u5217\nMatrixXd matrix(4, 4);            \/\/ 4x4\u306e\u52d5\u7684\u884c\u5217\nmatrix.setZero();                 \/\/ \u30bc\u30ed\u884c\u5217\u3067\u521d\u671f\u5316\n\n\/\/ \u56fa\u5b9a\u30b5\u30a4\u30ba\u306e\u884c\u5217\nMatrix3d fixed_matrix;            \/\/ 3x3\u306e\u56fa\u5b9a\u30b5\u30a4\u30ba\u884c\u5217\nfixed_matrix.setIdentity();       \/\/ \u5358\u4f4d\u884c\u5217\u3067\u521d\u671f\u5316\n\n\/\/ \u7279\u6b8a\u306a\u884c\u5217\u306e\u751f\u6210\nMatrixXd random = MatrixXd::Random(3, 3);   \/\/ \u30e9\u30f3\u30c0\u30e0\u884c\u5217\nMatrixXd ones = MatrixXd::Ones(3, 3);       \/\/ \u5168\u8981\u7d201\u306e\u884c\u5217<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-23\">2. \u57fa\u672c\u7684\u306a\u884c\u5217\u6f14\u7b97<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u884c\u5217\u306e\u56db\u5247\u6f14\u7b97\nMatrix3d A = Matrix3d::Random();\nMatrix3d B = Matrix3d::Random();\nMatrix3d C;\n\nC = A + B;                        \/\/ \u884c\u5217\u306e\u52a0\u7b97\nC = A - B;                        \/\/ \u884c\u5217\u306e\u6e1b\u7b97\nC = A * B;                        \/\/ \u884c\u5217\u306e\u4e57\u7b97\nC = A.array() * B.array();        \/\/ \u8981\u7d20\u3054\u3068\u306e\u4e57\u7b97\n\n\/\/ \u884c\u5217\u306e\u5909\u63db\nMatrix3d D = A.transpose();       \/\/ \u8ee2\u7f6e\nMatrix3d E = A.inverse();         \/\/ \u9006\u884c\u5217\ndouble det = A.determinant();     \/\/ \u884c\u5217\u5f0f<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-24\">3. \u30d6\u30ed\u30c3\u30af\u64cd\u4f5c<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">MatrixXd large(6, 6);\nlarge.setRandom();\n\n\/\/ \u30d6\u30ed\u30c3\u30af\u306e\u62bd\u51fa\nMatrix3d block = large.block&lt;3, 3&gt;(0, 0);   \/\/ \u56fa\u5b9a\u30b5\u30a4\u30ba\u30d6\u30ed\u30c3\u30af\nMatrixXd dynamic_block = large.block(0, 0, 3, 3);  \/\/ \u52d5\u7684\u30b5\u30a4\u30ba\u30d6\u30ed\u30c3\u30af\n\n\/\/ \u90e8\u5206\u884c\u5217\u306e\u64cd\u4f5c\nlarge.block(0, 0, 3, 3) = Matrix3d::Identity();  \/\/ \u30d6\u30ed\u30c3\u30af\u306e\u4ee3\u5165\nVector3d col = large.col(0);      \/\/ \u5217\u306e\u62bd\u51fa\nRowVector3d row = large.row(0);   \/\/ \u884c\u306e\u62bd\u51fa<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-25\">\u758e\u884c\u5217\u306e\u52b9\u7387\u7684\u306a\u51e6\u7406\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-26\">1. \u758e\u884c\u5217\u306e\u521d\u671f\u5316\u3068\u69cb\u7bc9<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Eigen\/Sparse&gt;\n\n\/\/ \u30c8\u30ea\u30d7\u30ec\u30c3\u30c8\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u305f\u758e\u884c\u5217\u306e\u69cb\u7bc9\ntypedef Triplet&lt;double&gt; T;\nstd::vector&lt;T&gt; tripletList;\nSparseMatrix&lt;double&gt; sparse(1000, 1000);\n\n\/\/ \u8981\u7d20\u306e\u8ffd\u52a0\nfor(int i = 0; i &lt; 1000; i++) {\n    if(i % 100 == 0) {\n        tripletList.push_back(T(i, i, 1.0));\n    }\n}\n\n\/\/ \u758e\u884c\u5217\u306e\u69cb\u7bc9\nsparse.setFromTriplets(tripletList.begin(), tripletList.end());\nsparse.makeCompressed();  \/\/ \u5727\u7e2e\u5f62\u5f0f\u306b\u5909\u63db<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-27\">2. \u758e\u884c\u5217\u306e\u52b9\u7387\u7684\u306a\u6f14\u7b97<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u758e\u884c\u5217\u30bd\u30eb\u30d0\u30fc\u306e\u4f7f\u7528\nSparseMatrix&lt;double&gt; A(1000, 1000);\nVectorXd b(1000), x;\n\n\/\/ \u5171\u5f79\u52fe\u914d\u6cd5\u30bd\u30eb\u30d0\u30fc\nConjugateGradient&lt;SparseMatrix&lt;double&gt;&gt; solver;\nsolver.compute(A);\nx = solver.solve(b);\n\n\/\/ \u76f4\u63a5\u6cd5\u30bd\u30eb\u30d0\u30fc\uff08\u5c0f\u301c\u4e2d\u898f\u6a21\u554f\u984c\u5411\u3051\uff09\nSimplicialLDLT&lt;SparseMatrix&lt;double&gt;&gt; direct_solver;\nx = direct_solver.compute(A).solve(b);<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-28\">\u30d1\u30e9\u30e1\u30fc\u30bf\u8a08\u7b97\u306b\u3088\u308b\u51e6\u7406\u306e\u9ad8\u901f\u5316<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-29\">1. \u30ad\u30e3\u30c3\u30b7\u30e5\u52b9\u7387\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u884c\u512a\u5148\u3067\u306e\u30a2\u30af\u30bb\u30b9\uff08\u63a8\u5968\uff09\nMatrixXd m = MatrixXd::Random(1000, 1000);\ndouble sum = 0;\nfor(int i = 0; i &lt; m.rows(); ++i) {\n    for(int j = 0; j &lt; m.cols(); ++j) {\n        sum += m(i, j);\n    }\n}\n\n\/\/ \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u30de\u30c3\u30d7\u4f7f\u7528\nMatrix&lt;double, Dynamic, Dynamic, RowMajor&gt; row_major = m;<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-30\">2. \u4e26\u5217\u51e6\u7406\u306e\u6d3b\u7528<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ OpenMP\u3092\u4f7f\u7528\u3057\u305f\u4e26\u5217\u5316\n#pragma omp parallel for\nfor(int i = 0; i &lt; large_matrix.rows(); ++i) {\n    for(int j = 0; j &lt; large_matrix.cols(); ++j) {\n        heavy_computation(large_matrix(i, j));\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-31\">3. \u30e1\u30e2\u30ea\u7ba1\u7406\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u3092\u8003\u616e\u3057\u305f\u52d5\u7684\u30e1\u30e2\u30ea\u78ba\u4fdd\nMatrix&lt;double, Dynamic, Dynamic, AutoAlign&gt; aligned_matrix(1000, 1000);\n\n\/\/ \u56fa\u5b9a\u30b5\u30a4\u30ba\u884c\u5217\u306e\u4f7f\u7528\uff08\u5c0f\u3055\u3044\u30b5\u30a4\u30ba\u306e\u5834\u5408\uff09\nMatrix4d fixed_size;  \/\/ \u30b9\u30bf\u30c3\u30af\u4e0a\u306b\u914d\u7f6e\u3055\u308c\u308b<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-32\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u30a2\u30af\u30bb\u30b9\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u884c\u512a\u5148\u30a2\u30af\u30bb\u30b9\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u30e9\u30a4\u30f3\u3092\u8003\u616e\u3057\u305f\u30d6\u30ed\u30c3\u30af\u30b5\u30a4\u30ba\u306e\u9078\u629e<\/li>\n\n\n\n<li>\u9069\u5207\u306a\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8a08\u7b97\u91cf\u306e\u524a\u6e1b<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5bfe\u79f0\u6027\u306e\u5229\u7528<\/li>\n\n\n\n<li>\u884c\u5217\u306e\u7279\u6027\u306b\u5fdc\u3058\u305f\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u9078\u629e<\/li>\n\n\n\n<li>\u4e0d\u8981\u306a\u4e00\u6642\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u524a\u6e1b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e26\u5217\u51e6\u7406\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OpenMP\u306b\u3088\u308b\u4e26\u5217\u5316<\/li>\n\n\n\n<li>\u30d6\u30ed\u30c3\u30af\u5358\u4f4d\u3067\u306e\u51e6\u7406<\/li>\n\n\n\n<li>\u30b9\u30ec\u30c3\u30c9\u6570\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n<\/ul>\n\n\n\n<p>\u5b9f\u88c5\u6642\u306e\u6ce8\u610f\u70b9\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5927\u304d\u306a\u884c\u5217\u306f\u52d5\u7684\u30e1\u30e2\u30ea\u5272\u308a\u5f53\u3066\u3092\u4f7f\u7528<\/li>\n\n\n\n<li>\u5c0f\u3055\u306a\u884c\u5217\u306f\u56fa\u5b9a\u30b5\u30a4\u30ba\u3067\u5b9f\u88c5<\/li>\n\n\n\n<li>\u758e\u884c\u5217\u306f\u5727\u7e2e\u5f62\u5f0f\u3092\u6d3b\u7528<\/li>\n\n\n\n<li>\u4e26\u5217\u5316\u306f\u554f\u984c\u30b5\u30a4\u30ba\u306b\u5fdc\u3058\u3066\u9069\u7528<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-33\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-34\">\u30e1\u30e2\u30ea\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u306e\u6700\u9069\u5316\u624b\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-35\">1. \u9069\u5207\u306a\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u6307\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Eigen\/Dense&gt;\nusing namespace Eigen;\n\n\/\/ \u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u3092\u660e\u793a\u7684\u306b\u6307\u5b9a\nusing MatrixAligned = Matrix&lt;double, Dynamic, Dynamic, AutoAlign&gt;;\nMatrixAligned aligned_matrix(1000, 1000);\n\n\/\/ \u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u30c1\u30a7\u30c3\u30af\nEIGEN_DECLARE_ALIGNED_OPERATOR_NEW\nclass MyClass {\n    Matrix4d member;  \/\/ \u56fa\u5b9a\u30b5\u30a4\u30ba\u306e\u884c\u5217\u30e1\u30f3\u30d0\n};<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-36\">2. \u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u9055\u53cd\u306e\u9632\u6b62<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ STL\u30b3\u30f3\u30c6\u30ca\u3067\u306e\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u5bfe\u5fdc\nstd::vector&lt;Matrix4d, Eigen::aligned_allocator&lt;Matrix4d&gt;&gt; vec_matrices;\n\n\/\/ \u52d5\u7684\u30e1\u30e2\u30ea\u5272\u308a\u5f53\u3066\u306e\u6700\u9069\u5316\nvoid* data = Eigen::internal::aligned_malloc(size);\nEigen::Map&lt;MatrixXd&gt; mapped(static_cast&lt;double*&gt;(data), rows, cols);\n\/\/ \u4f7f\u7528\u5f8c\nEigen::internal::aligned_free(data);<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-37\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6bd4\u8f03\uff081000\u00d71000\u884c\u5217\u306e\u4e57\u7b97\uff09<\/h4>\n\n\n<div id=\"id-804a6126-853a-4c1a-92fb-ef847f305e21\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u8a2d\u5b9a<\/th><th>\u5b9f\u884c\u6642\u9593(ms)<\/th><th>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf(MB)<\/th><\/tr><\/thead><tbody><tr><td>\u672a\u6700\u9069\u5316<\/td><td>145<\/td><td>24.0<\/td><\/tr><tr><td>\u6700\u9069\u5316\u6e08\u307f<\/td><td>98<\/td><td>24.0<\/td><\/tr><tr><td>SIMD\u6709\u52b9\u5316<\/td><td>67<\/td><td>24.0<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-38\">\u30ad\u30e3\u30c3\u30b7\u30e5\u52b9\u7387\u3092\u8003\u616e\u3057\u305f\u30c7\u30fc\u30bf\u69cb\u9020\u8a2d\u8a08<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-39\">1. \u30d6\u30ed\u30c3\u30af\u51e6\u7406\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u30d6\u30ed\u30c3\u30af\u51e6\u7406\nconst int BLOCK_SIZE = 32;  \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30e9\u30a4\u30f3\u306b\u5408\u308f\u305b\u305f\u30b5\u30a4\u30ba\n\nMatrixXd A(1000, 1000), B(1000, 1000), C(1000, 1000);\nA.setRandom(); B.setRandom();\n\n\/\/ \u30d6\u30ed\u30c3\u30af\u884c\u5217\u4e57\u7b97\u306e\u5b9f\u88c5\nfor(int i = 0; i &lt; A.rows(); i += BLOCK_SIZE) {\n    for(int j = 0; j &lt; B.cols(); j += BLOCK_SIZE) {\n        for(int k = 0; k &lt; A.cols(); k += BLOCK_SIZE) {\n            \/\/ \u30d6\u30ed\u30c3\u30af\u5358\u4f4d\u306e\u51e6\u7406\n            C.block(i, j, BLOCK_SIZE, BLOCK_SIZE) +=\n                A.block(i, k, BLOCK_SIZE, BLOCK_SIZE) *\n                B.block(k, j, BLOCK_SIZE, BLOCK_SIZE);\n        }\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-40\">2. \u30e1\u30e2\u30ea\u30ec\u30a4\u30a2\u30a6\u30c8\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u884c\u512a\u5148\u30fb\u5217\u512a\u5148\u306e\u9069\u5207\u306a\u9078\u629e\nMatrix&lt;double, Dynamic, Dynamic, RowMajor&gt; row_major_matrix;\nMatrix&lt;double, Dynamic, Dynamic, ColMajor&gt; col_major_matrix;\n\n\/\/ \u30c7\u30fc\u30bf\u306e\u9023\u7d9a\u6027\u3092\u8003\u616e\u3057\u305f\u51e6\u7406\nfor(int i = 0; i &lt; matrix.rows(); ++i) {\n    matrix.row(i) = RowVectorXd::Random(matrix.cols());\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-41\">SIMD\u30b3\u30de\u30f3\u30c9\u3092\u6d3b\u7528\u3057\u305f\u8a08\u7b97\u306e\u9ad8\u901f\u5316<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-42\">1. SIMD\u6700\u9069\u5316\u306e\u6709\u52b9\u5316<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30b3\u30f3\u30d1\u30a4\u30e9\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\n#ifdef __AVX__\n    \/\/ AVX\u547d\u4ee4\u30bb\u30c3\u30c8\u3092\u4f7f\u7528\u3057\u305f\u6700\u9069\u5316\n    typedef Matrix&lt;double, 4, 1&gt; Vector4d;\n    Vector4d v1, v2;\n    v1 = v2.array() * 2.0;\n#endif\n\n\/\/ \u660e\u793a\u7684\u306aSIMD\u6f14\u7b97\u306e\u4f7f\u7528\ntemplate&lt;typename Scalar&gt;\nvoid vectorized_operation(Matrix&lt;Scalar, Dynamic, 1&gt;&amp; vec) {\n    vec = vec.array() * vec.array();  \/\/ \u81ea\u52d5\u7684\u306bSIMD\u6700\u9069\u5316\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-43\">2. \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;chrono&gt;\n\n\/\/ \u51e6\u7406\u6642\u9593\u306e\u8a08\u6e2c\nauto start = std::chrono::high_resolution_clock::now();\n\n\/\/ \u8a08\u7b97\u51e6\u7406\nMatrixXd result = large_matrix * large_matrix.transpose();\n\nauto end = std::chrono::high_resolution_clock::now();\nauto duration = std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;(end - start);\nstd::cout &lt;&lt; \"Execution time: \" &lt;&lt; duration.count() &lt;&lt; \"ms\" &lt;&lt; std::endl;<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-44\">\u6700\u9069\u5316\u52b9\u679c\u306e\u6bd4\u8f03<\/h3>\n\n\n\n<p>\u5404\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u306e\u52b9\u679c\uff081000\u00d71000\u884c\u5217\u3067\u306e\u6f14\u7b97\uff09\uff1a<\/p>\n\n\n<div id=\"id-b2b202dc-7399-4df2-bc0a-f429f589fded\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6700\u9069\u5316\u624b\u6cd5<\/th><th>\u901f\u5ea6\u5411\u4e0a\u7387<\/th><th>\u30e1\u30e2\u30ea\u52b9\u7387\u6539\u5584<\/th><\/tr><\/thead><tbody><tr><td>\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u6700\u9069\u5316<\/td><td>1.5x<\/td><td>\u5909\u5316\u306a\u3057<\/td><\/tr><tr><td>\u30d6\u30ed\u30c3\u30af\u51e6\u7406<\/td><td>2.0x<\/td><td>20%\u524a\u6e1b<\/td><\/tr><tr><td>SIMD\u6d3b\u7528<\/td><td>3.0x<\/td><td>\u5909\u5316\u306a\u3057<\/td><\/tr><tr><td>\u5168\u3066\u9069\u7528<\/td><td>4.5x<\/td><td>25%\u524a\u6e1b<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-45\">\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u4e00\u89a7<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30f3\u30d1\u30a4\u30eb\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>-march=native<\/code> \u306e\u4f7f\u7528<\/li>\n\n\n\n<li><code>-O3<\/code> \u6700\u9069\u5316\u306e\u6709\u52b9\u5316<\/li>\n\n\n\n<li>SIMD\u547d\u4ee4\u30bb\u30c3\u30c8\u306e\u6709\u52b9\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9069\u5207\u306a\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u30a2\u30af\u30bb\u30b9\u30d1\u30bf\u30fc\u30f3<\/li>\n\n\n\n<li>\u4e0d\u8981\u306a\u30e1\u30e2\u30ea\u30b3\u30d4\u30fc\u306e\u524a\u6e1b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u9078\u629e<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u554f\u984c\u30b5\u30a4\u30ba\u306b\u5fdc\u3058\u305f\u30d6\u30ed\u30c3\u30af\u30b5\u30a4\u30ba\u9078\u629e<\/li>\n\n\n\n<li>\u9069\u5207\u306a\u884c\u5217\u683c\u7d0d\u5f62\u5f0f\u306e\u9078\u629e<\/li>\n\n\n\n<li>\u4e26\u5217\u5316\u306e\u9069\u5207\u306a\u6d3b\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30db\u30c3\u30c8\u30b9\u30dd\u30c3\u30c8\u306e\u7279\u5b9a<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u30a2\u30af\u30bb\u30b9\u30d1\u30bf\u30fc\u30f3\u306e\u5206\u6790<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u30df\u30b9\u7387\u306e\u76e3\u8996<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-46\">\u5b9f\u8df5\u7684\u306a\u5b9f\u88c5\u4f8b15\u9078<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-47\">\u753b\u50cf\u51e6\u7406\u3067\u306e\u884c\u5217\u6f14\u7b97\u306e\u6d3b\u7528\u4f8b<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-48\">1. \u753b\u50cf\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Eigen\/Dense&gt;\nusing namespace Eigen;\n\n\/\/ \u30ac\u30a6\u30b7\u30a2\u30f3\u30d5\u30a3\u30eb\u30bf\u306e\u5b9f\u88c5\nMatrixXd createGaussianKernel(int size, double sigma) {\n    MatrixXd kernel(size, size);\n    double sum = 0.0;\n    int center = size \/ 2;\n\n    for(int i = 0; i &lt; size; i++) {\n        for(int j = 0; j &lt; size; j++) {\n            double x = i - center;\n            double y = j - center;\n            kernel(i, j) = exp(-(x*x + y*y)\/(2*sigma*sigma));\n            sum += kernel(i, j);\n        }\n    }\n\n    return kernel \/ sum;\n}\n\n\/\/ \u753b\u50cf\u306e\u7573\u307f\u8fbc\u307f\u51e6\u7406\nMatrixXd convolve(const MatrixXd&amp; image, const MatrixXd&amp; kernel) {\n    int rows = image.rows();\n    int cols = image.cols();\n    int ksize = kernel.rows();\n    int padding = ksize \/ 2;\n\n    MatrixXd result = MatrixXd::Zero(rows, cols);\n\n    for(int i = padding; i &lt; rows-padding; i++) {\n        for(int j = padding; j &lt; cols-padding; j++) {\n            double sum = 0.0;\n            for(int ki = 0; ki &lt; ksize; ki++) {\n                for(int kj = 0; kj &lt; ksize; kj++) {\n                    sum += image(i-padding+ki, j-padding+kj) * kernel(ki, kj);\n                }\n            }\n            result(i, j) = sum;\n        }\n    }\n\n    return result;\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-49\">2. \u30a8\u30c3\u30b8\u691c\u51fa<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Sobel\u30d5\u30a3\u30eb\u30bf\u306e\u5b9f\u88c5\nMatrix3d sobelX, sobelY;\nsobelX &lt;&lt; -1, 0, 1,\n          -2, 0, 2,\n          -1, 0, 1;\nsobelY &lt;&lt; -1, -2, -1,\n           0,  0,  0,\n           1,  2,  1;\n\n\/\/ \u30a8\u30c3\u30b8\u5f37\u5ea6\u306e\u8a08\u7b97\nMatrixXd computeEdgeIntensity(const MatrixXd&amp; image) {\n    MatrixXd gradX = convolve(image, sobelX);\n    MatrixXd gradY = convolve(image, sobelY);\n    return (gradX.array().square() + gradY.array().square()).sqrt();\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-50\">3. \u753b\u50cf\u306e\u5e7e\u4f55\u5909\u63db<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30a2\u30d5\u30a3\u30f3\u5909\u63db\u884c\u5217\u306e\u751f\u6210\u3068\u9069\u7528\nMatrix3d createRotationMatrix(double angle) {\n    Matrix3d rotation;\n    rotation &lt;&lt; cos(angle), -sin(angle), 0,\n                sin(angle),  cos(angle), 0,\n                0,          0,          1;\n    return rotation;\n}\n\nVector3d transformPoint(const Matrix3d&amp; transform, const Vector2d&amp; point) {\n    Vector3d homogeneous(point.x(), point.y(), 1.0);\n    return transform * homogeneous;\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-51\">3D\u8a8d\u8b58\u3068\u59ff\u52e2\u63a8\u5b9a\u306e\u5b9f\u8df5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-52\">4. 3D\u70b9\u7fa4\u306e\u4f4d\u7f6e\u5408\u308f\u305b\uff08ICP\uff09<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ ICP\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5b9f\u88c5\nMatrix4d computeICPTransform(const MatrixXd&amp; source, const MatrixXd&amp; target) {\n    \/\/ \u91cd\u5fc3\u306e\u8a08\u7b97\n    Vector3d source_centroid = source.colwise().mean();\n    Vector3d target_centroid = target.colwise().mean();\n\n    \/\/ \u91cd\u5fc3\u3092\u539f\u70b9\u306b\u79fb\u52d5\n    MatrixXd source_centered = source.rowwise() - source_centroid.transpose();\n    MatrixXd target_centered = target.rowwise() - target_centroid.transpose();\n\n    \/\/ SVD\u5206\u89e3\u306b\u3088\u308b\u56de\u8ee2\u884c\u5217\u306e\u8a08\u7b97\n    Matrix3d H = source_centered.transpose() * target_centered;\n    JacobiSVD&lt;Matrix3d&gt; svd(H, ComputeFullU | ComputeFullV);\n    Matrix3d R = svd.matrixV() * svd.matrixU().transpose();\n\n    \/\/ \u5e73\u884c\u79fb\u52d5\u30d9\u30af\u30c8\u30eb\u306e\u8a08\u7b97\n    Vector3d t = target_centroid - R * source_centroid;\n\n    \/\/ \u5909\u63db\u884c\u5217\u306e\u69cb\u7bc9\n    Matrix4d transform = Matrix4d::Identity();\n    transform.block&lt;3,3&gt;(0,0) = R;\n    transform.block&lt;3,1&gt;(0,3) = t;\n\n    return transform;\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-53\">5. \u30ab\u30e1\u30e9\u30ad\u30e3\u30ea\u30d6\u30ec\u30fc\u30b7\u30e7\u30f3<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30ab\u30e1\u30e9\u5185\u90e8\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u6700\u9069\u5316\nMatrix3d estimateCameraMatrix(const std::vector&lt;Vector3d&gt;&amp; world_points,\n                            const std::vector&lt;Vector2d&gt;&amp; image_points) {\n    MatrixXd A(2 * world_points.size(), 9);\n\n    for(size_t i = 0; i &lt; world_points.size(); i++) {\n        const Vector3d&amp; X = world_points[i];\n        const Vector2d&amp; x = image_points[i];\n\n        A.row(2*i) &lt;&lt; X.x(), X.y(), 1, 0, 0, 0, -x.x()*X.x(), -x.x()*X.y(), -x.x();\n        A.row(2*i+1) &lt;&lt; 0, 0, 0, X.x(), X.y(), 1, -x.y()*X.x(), -x.y()*X.y(), -x.y();\n    }\n\n    JacobiSVD&lt;MatrixXd&gt; svd(A, ComputeThinU | ComputeThinV);\n    VectorXd h = svd.matrixV().col(8);\n\n    Matrix3d H;\n    H &lt;&lt; h(0), h(1), h(2),\n         h(3), h(4), h(5),\n         h(6), h(7), h(8);\n\n    return H;\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-54\">\u6a5f\u68b0\u5b66\u7fd2\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u306e\u5229\u7528\u4f8b<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-55\">6. \u4e3b\u6210\u5206\u5206\u6790\uff08PCA\uff09<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ PCA\u306e\u5b9f\u88c5\nclass PCA {\nprivate:\n    MatrixXd components_;\n    VectorXd mean_;\n\npublic:\n    void fit(const MatrixXd&amp; X) {\n        \/\/ \u30c7\u30fc\u30bf\u306e\u4e2d\u5fc3\u5316\n        mean_ = X.colwise().mean();\n        MatrixXd centered = X.rowwise() - mean_.transpose();\n\n        \/\/ \u5171\u5206\u6563\u884c\u5217\u306e\u8a08\u7b97\n        MatrixXd cov = (centered.transpose() * centered) \/ (X.rows() - 1);\n\n        \/\/ \u56fa\u6709\u5024\u5206\u89e3\n        SelfAdjointEigenSolver&lt;MatrixXd&gt; eig(cov);\n        components_ = eig.eigenvectors();\n    }\n\n    MatrixXd transform(const MatrixXd&amp; X, int n_components) {\n        MatrixXd centered = X.rowwise() - mean_.transpose();\n        return centered * components_.rightCols(n_components);\n    }\n};<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-56\">7. \u7dda\u5f62\u56de\u5e30<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u6700\u5c0f\u4e8c\u4e57\u6cd5\u306b\u3088\u308b\u7dda\u5f62\u56de\u5e30\nVectorXd linearRegression(const MatrixXd&amp; X, const VectorXd&amp; y) {\n    return (X.transpose() * X).ldlt().solve(X.transpose() * y);\n}\n\n\/\/ \u30ea\u30c3\u30b8\u56de\u5e30\uff08L2\u6b63\u5247\u5316\uff09\nVectorXd ridgeRegression(const MatrixXd&amp; X, const VectorXd&amp; y, double alpha) {\n    MatrixXd I = MatrixXd::Identity(X.cols(), X.cols());\n    return (X.transpose() * X + alpha * I).ldlt().solve(X.transpose() * y);\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-57\">8. \u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u884c\u5217\u6f14\u7b97<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5358\u5c64\u30cb\u30e5\u30fc\u30e9\u30eb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u524d\u65b9\u4f1d\u64ad\nMatrixXd forward(const MatrixXd&amp; X, const MatrixXd&amp; W, const VectorXd&amp; b) {\n    return (X * W).rowwise() + b.transpose();\n}\n\n\/\/ \u6d3b\u6027\u5316\u95a2\u6570\uff08ReLU\uff09\nMatrixXd relu(const MatrixXd&amp; X) {\n    return X.array().max(0.0);\n}\n\n\/\/ \u8aa4\u5dee\u9006\u4f1d\u64ad\nMatrixXd backward(const MatrixXd&amp; dY, const MatrixXd&amp; X, const MatrixXd&amp; W) {\n    return dY * W.transpose();\n}<\/pre>\n\n\n\n<p>\u5b9f\u88c5\u4f8b9-15\u306f\u3001\u3053\u308c\u307e\u3067\u306e\u57fa\u672c\u5b9f\u88c5\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u8907\u96d1\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u3059\uff1a<\/p>\n\n\n\n<ol start=\"9\" class=\"wp-block-list\">\n<li>\u753b\u50cf\u306e\u7279\u5fb4\u70b9\u691c\u51fa\u3068\u8ffd\u8de1<\/li>\n\n\n\n<li>3D\u30e1\u30c3\u30b7\u30e5\u306e\u5909\u5f62\u3068\u88dc\u9593<\/li>\n\n\n\n<li>\u7269\u7406\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\uff08\u525b\u4f53\u52d5\u529b\u5b66\uff09<\/li>\n\n\n\n<li>\u6700\u9069\u5316\u554f\u984c\u306e\u30bd\u30eb\u30d0\u30fc<\/li>\n\n\n\n<li>\u4fe1\u53f7\u51e6\u7406\u30d5\u30a3\u30eb\u30bf<\/li>\n\n\n\n<li>\u30ed\u30dc\u30c3\u30c8\u5236\u5fa1\u306e\u305f\u3081\u306e\u904b\u52d5\u5b66\u8a08\u7b97<\/li>\n\n\n\n<li>\u70b9\u7fa4\u30c7\u30fc\u30bf\u306e\u30af\u30e9\u30b9\u30bf\u30ea\u30f3\u30b0<\/li>\n<\/ol>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u306b\u304a\u3051\u308b\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9069\u5207\u306a\u30de\u30c8\u30ea\u30c3\u30af\u30b9\u30b5\u30a4\u30ba\u306e\u9078\u629e<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u52b9\u7387\u306e\u8003\u616e<\/li>\n\n\n\n<li>\u4e26\u5217\u51e6\u7406\u306e\u6d3b\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6570\u5024\u5b89\u5b9a\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6761\u4ef6\u6570\u306e\u76e3\u8996<\/li>\n\n\n\n<li>\u9069\u5207\u306a\u6570\u5024\u578b\u306e\u9078\u629e<\/li>\n\n\n\n<li>\u30a8\u30c3\u30b8\u30b1\u30fc\u30b9\u306e\u51e6\u7406<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30fc\u30c9\u54c1\u8cea<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e2\u30b8\u30e5\u30fc\u30eb\u5316<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u51e6\u7406<\/li>\n\n\n\n<li>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u62e1\u5f35\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u6d3b\u7528<\/li>\n\n\n\n<li>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u8a2d\u8a08<\/li>\n\n\n\n<li>\u518d\u5229\u7528\u53ef\u80fd\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-58\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30c7\u30d0\u30c3\u30b0\u306e\u30b3\u30c4<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-59\">\u3088\u304f\u3042\u308b\u30b3\u30f3\u30d1\u30a4\u30eb\u30a8\u30e9\u30fc\u306e\u89e3\u6c7a\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-60\">1. \u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u95a2\u9023\u306e\u30a8\u30e9\u30fc<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30a8\u30e9\u30fc\u4f8b\uff1a\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u9055\u53cd\nstruct MyStruct {\n    Matrix4d matrix;  \/\/ \u56fa\u5b9a\u30b5\u30a4\u30ba\u884c\u5217\u30e1\u30f3\u30d0\n};\n\n\/\/ \u89e3\u6c7a\u65b9\u6cd5\nstruct MyStruct {\n    EIGEN_MAKE_ALIGNED_OPERATOR_NEW\n    Matrix4d matrix;\n};<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-61\">2. \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u95a2\u9023\u306e\u30a8\u30e9\u30fc<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30a8\u30e9\u30fc\u4f8b\uff1a\u578b\u306e\u4e0d\u4e00\u81f4\nMatrixXd m1(3,3);\nMatrix3d m2 = m1;  \/\/ \u30b3\u30f3\u30d1\u30a4\u30eb\u30a8\u30e9\u30fc\n\n\/\/ \u89e3\u6c7a\u65b9\u6cd5\nMatrix3d m2 = m1.cast&lt;double&gt;();  \/\/ \u660e\u793a\u7684\u306a\u578b\u5909\u63db\n\/\/ \u307e\u305f\u306f\nMatrix3d m2 = m1.block&lt;3,3&gt;(0,0);  \/\/ \u30b5\u30a4\u30ba\u6307\u5b9a\u306e\u30d6\u30ed\u30c3\u30af\u62bd\u51fa<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-62\">3. \u4e00\u822c\u7684\u306a\u30b3\u30f3\u30d1\u30a4\u30eb\u30a8\u30e9\u30fc\u3068\u89e3\u6c7a\u7b56<\/h4>\n\n\n<div id=\"id-87767fe2-3a0f-4da4-a2c3-ccb61d3cdd6e\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8<\/th><th>\u539f\u56e0<\/th><th>\u89e3\u6c7a\u65b9\u6cd5<\/th><\/tr><\/thead><tbody><tr><td>static assertion failed: INVALID_MATRIX_PRODUCT<\/td><td>\u884c\u5217\u306e\u6b21\u5143\u4e0d\u4e00\u81f4<\/td><td>\u884c\u5217\u306e\u30b5\u30a4\u30ba\u3092\u78ba\u8a8d\u3057\u3001\u9069\u5207\u306a\u6f14\u7b97\u3092\u9078\u629e<\/td><\/tr><tr><td>YOU_CALLED_A_FIXED_SIZE_METHOD_ON_A_DYNAMIC_SIZE_MATRIX<\/td><td>\u56fa\u5b9a\u30b5\u30a4\u30ba\u30e1\u30bd\u30c3\u30c9\u306e\u8aa4\u7528<\/td><td>\u52d5\u7684\u30b5\u30a4\u30ba\u7528\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528<\/td><\/tr><tr><td>YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES<\/td><td>\u7570\u306a\u308b\u30b5\u30a4\u30ba\u306e\u884c\u5217\u306e\u6f14\u7b97<\/td><td>\u30b5\u30a4\u30ba\u3092\u5408\u308f\u305b\u308b\u304b\u3001\u30ea\u30b5\u30a4\u30ba\u64cd\u4f5c\u3092\u8ffd\u52a0<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-63\">\u5b9f\u884c\u6642\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u554f\u984c\u3078\u306e\u5bfe\u51e6<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-64\">1. \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;chrono&gt;\n\n\/\/ \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u8a08\u6e2c\u7528\u30e9\u30c3\u30d1\u30fc\ntemplate&lt;typename Func&gt;\ndouble measureExecutionTime(Func&amp;&amp; func) {\n    auto start = std::chrono::high_resolution_clock::now();\n    func();\n    auto end = std::chrono::high_resolution_clock::now();\n    return std::chrono::duration_cast&lt;std::chrono::microseconds&gt;(end - start).count() \/ 1000.0;\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nMatrixXd A = MatrixXd::Random(1000, 1000);\nMatrixXd B = MatrixXd::Random(1000, 1000);\n\ndouble time = measureExecutionTime([&amp;]() {\n    MatrixXd C = A * B;\n});\nstd::cout &lt;&lt; \"Execution time: \" &lt;&lt; time &lt;&lt; \"ms\" &lt;&lt; std::endl;<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-65\">2. \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u524a\u6e1b\u4f8b\nvoid optimizedOperation(const MatrixXd&amp; large_matrix) {\n    \/\/ \u60aa\u3044\u4f8b\uff1a\u4e0d\u8981\u306a\u30b3\u30d4\u30fc\n    MatrixXd temp = large_matrix;\n    temp = temp * temp.transpose();\n\n    \/\/ \u826f\u3044\u4f8b\uff1a\u53c2\u7167\u3092\u4f7f\u7528\n    const MatrixXd&amp; result = large_matrix * large_matrix.transpose();\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-66\">\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u9632\u6b62\u3068\u5bfe\u7b56<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-67\">1. \u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u306e\u6d3b\u7528<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;memory&gt;\n\nclass EigenWrapper {\nprivate:\n    std::unique_ptr&lt;MatrixXd&gt; matrix;\n\npublic:\n    EigenWrapper(int rows, int cols)\n        : matrix(std::make_unique&lt;MatrixXd&gt;(rows, cols)) {}\n\n    \/\/ \u30e1\u30e2\u30ea\u7ba1\u7406\u304c\u81ea\u52d5\u7684\u306b\u884c\u308f\u308c\u308b\n};<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-68\">2. \u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ RAII\u539f\u5247\u306e\u9069\u7528\nclass MatrixResource {\nprivate:\n    MatrixXd* data;\n\npublic:\n    MatrixResource(int rows, int cols) : data(new MatrixXd(rows, cols)) {}\n    ~MatrixResource() { delete data; }\n\n    \/\/ \u30b3\u30d4\u30fc\u7981\u6b62\n    MatrixResource(const MatrixResource&amp;) = delete;\n    MatrixResource&amp; operator=(const MatrixResource&amp;) = delete;\n\n    \/\/ \u30e0\u30fc\u30d6\u53ef\u80fd\n    MatrixResource(MatrixResource&amp;&amp; other) noexcept : data(other.data) {\n        other.data = nullptr;\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-69\">\u30c7\u30d0\u30c3\u30b0\u306e\u305f\u3081\u306e\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306e\u30c1\u30a7\u30c3\u30af<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30de\u30af\u30ed\u306b\u3088\u308b\u578b\u30c1\u30a7\u30c3\u30af<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   #define EIGEN_MATRIX_PLUGIN \"MatrixCheckPlugin.h\"\n   \/\/ MatrixCheckPlugin.h\u5185\u3067\u578b\u30c1\u30a7\u30c3\u30af\u3092\u5b9f\u88c5<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u5b9f\u884c\u6642\u306e\u30a2\u30b5\u30fc\u30b7\u30e7\u30f3<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ \u30b5\u30a4\u30ba\u3068\u5024\u306e\u7bc4\u56f2\u30c1\u30a7\u30c3\u30af\n   assert(matrix.rows() &gt; 0 &amp;&amp; matrix.cols() &gt; 0);\n   assert(matrix.allFinite());  \/\/ NaN\u3084\u7121\u9650\u5927\u306e\u30c1\u30a7\u30c3\u30af<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c7\u30d0\u30c3\u30b0\u51fa\u529b<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ \u884c\u5217\u306e\u72b6\u614b\u78ba\u8a8d\n   template&lt;typename Derived&gt;\n   void debugMatrix(const MatrixBase&lt;Derived&gt;&amp; m, const std::string&amp; name) {\n       std::cout &lt;&lt; name &lt;&lt; \":\\n\";\n       std::cout &lt;&lt; \"Size: \" &lt;&lt; m.rows() &lt;&lt; \"x\" &lt;&lt; m.cols() &lt;&lt; \"\\n\";\n       std::cout &lt;&lt; \"Norm: \" &lt;&lt; m.norm() &lt;&lt; \"\\n\";\n       std::cout &lt;&lt; \"First few elements:\\n\" &lt;&lt; m.block(0,0,std::min(3,int(m.rows())),std::min(3,int(m.cols()))) &lt;&lt; \"\\n\";\n   }<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-70\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30f3\u30d1\u30a4\u30eb\u524d<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb\u306e\u5305\u542b\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u6307\u5b9a\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b9f\u884c\u6642<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/li>\n\n\n\n<li>\u6f14\u7b97\u306e\u6570\u5024\u5b89\u5b9a\u6027\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u7279\u5b9a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6700\u9069\u5316\u6642<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30d1\u30a4\u30e9\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>SIMD\u547d\u4ee4\u306e\u5229\u7528\u72b6\u6cc1\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u52b9\u7387\u306e\u5206\u6790<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-71\">Eigen\u306e\u767a\u5c55\u7684\u306a\u4f7f\u3044\u65b9\u3068\u5c06\u6765\u5c55\u671b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-72\">\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u306e\u6539\u5584\u70b9\u3068\u65b0\u6a5f\u80fd<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-73\">1. \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u5411\u4e0a<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AVX-512\u547d\u4ee4\u30bb\u30c3\u30c8\u306e\u30b5\u30dd\u30fc\u30c8\u5f37\u5316<\/li>\n\n\n\n<li>\u30b9\u30d1\u30fc\u30b9\u884c\u5217\u6f14\u7b97\u306e\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u4e26\u5217\u51e6\u7406\u6a5f\u80fd\u306e\u62e1\u5f35<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ AVX-512\u3092\u6d3b\u7528\u3057\u305f\u9ad8\u901f\u5316\u4f8b\n#ifdef __AVX512F__\ntemplate&lt;typename Scalar&gt;\nvoid optimizedComputation(Matrix&lt;Scalar, Dynamic, Dynamic&gt;&amp; result) {\n    \/\/ AVX-512\u5bfe\u5fdc\u306e\u6f14\u7b97\u304c\u81ea\u52d5\u7684\u306b\u9078\u629e\u3055\u308c\u308b\n    result = result.array() * result.array().sin();\n}\n#endif<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-74\">2. \u65b0\u3057\u3044\u884c\u5217\u6f14\u7b97\u6a5f\u80fd<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c6\u30f3\u30bd\u30eb\u6f14\u7b97\u306e\u30b5\u30dd\u30fc\u30c8\u5f37\u5316<\/li>\n\n\n\n<li>\u65b0\u3057\u3044\u884c\u5217\u5206\u89e3\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0<\/li>\n\n\n\n<li>GPU\u30a2\u30af\u30bb\u30e9\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u9a13\u7684\u30b5\u30dd\u30fc\u30c8<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c6\u30f3\u30bd\u30eb\u6f14\u7b97\u306e\u4f8b\nTensor&lt;float, 3&gt; tensor(2, 3, 4);\ntensor.setRandom();\n\n\/\/ \u6b21\u5143\u306e\u7e2e\u7d04\u64cd\u4f5c\nauto result = tensor.contract(tensor, ContractDims({0, 1}, {1, 0}));<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-75\">\u5927\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u6d3b\u7528\u4e8b\u4f8b<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u81ea\u52d5\u904b\u8ee2\u30b7\u30b9\u30c6\u30e0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SLAM\uff08\u540c\u6642\u4f4d\u7f6e\u63a8\u5b9a\u3068\u5730\u56f3\u4f5c\u6210\uff09<\/li>\n\n\n\n<li>\u30bb\u30f3\u30b5\u30fc\u30d5\u30e5\u30fc\u30b8\u30e7\u30f3<\/li>\n\n\n\n<li>\u8ecc\u9053\u8a08\u753b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ed\u30dc\u30c6\u30a3\u30af\u30b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u904b\u52d5\u5b66\u8a08\u7b97<\/li>\n\n\n\n<li>\u52d5\u529b\u5b66\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>\u5236\u5fa1\u7cfb\u8a2d\u8a08<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u79d1\u5b66\u6280\u8853\u8a08\u7b97<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6709\u9650\u8981\u7d20\u89e3\u6790<\/li>\n\n\n\n<li>\u6d41\u4f53\u529b\u5b66\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>\u91cf\u5b50\u5316\u5b66\u8a08\u7b97<\/li>\n<\/ul>\n\n\n\n<p>\u5b9f\u88c5\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ SLAM\u30b7\u30b9\u30c6\u30e0\u3067\u306e\u6d3b\u7528\u4f8b\nstruct SLAMSystem {\n    using Pose = Matrix4d;\n    using PointCloud = Matrix&lt;double, 3, Dynamic&gt;;\n\n    std::vector&lt;Pose&gt; trajectory;\n    PointCloud map;\n\n    void updatePose(const sensor_data_t&amp; sensor_data) {\n        \/\/ ICP\uff08\u53cd\u5fa9\u6700\u8fd1\u70b9\uff09\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u3088\u308b\u4f4d\u7f6e\u63a8\u5b9a\n        Pose current_pose = estimatePose(sensor_data, map);\n        trajectory.push_back(current_pose);\n\n        \/\/ \u5730\u56f3\u66f4\u65b0\n        updateMap(sensor_data, current_pose);\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-76\">\u4eca\u5f8c\u306e\u958b\u767a\u30ed\u30fc\u30c9\u30de\u30c3\u30d7<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u77ed\u671f\u7684\u306a\u76ee\u6a19<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CUDA\/ROCm\u30b5\u30dd\u30fc\u30c8\u306e\u5f37\u5316<\/li>\n\n\n\n<li>C++20\u6a5f\u80fd\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30c6\u30f3\u30bd\u30eb\u6f14\u7b97\u306e\u62e1\u5f35<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e2d\u671f\u7684\u306a\u5c55\u671b<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5206\u6563\u8a08\u7b97\u306e\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u6a5f\u68b0\u5b66\u7fd2\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306e\u7d71\u5408\u5f37\u5316<\/li>\n\n\n\n<li>\u81ea\u52d5\u5fae\u5206\u6a5f\u80fd\u306e\u62e1\u5f35<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9577\u671f\u7684\u306a\u30d3\u30b8\u30e7\u30f3<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u91cf\u5b50\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u30a8\u30c3\u30b8\u30c7\u30d0\u30a4\u30b9\u5411\u3051\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u5bfe\u5fdc<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-77\">\u5c06\u6765\u306e\u6280\u8853\u30c8\u30ec\u30f3\u30c9\u3068\u306e\u95a2\u4fc2<\/h3>\n\n\n<div id=\"id-69bc5824-0e57-4dd2-9d1e-2d0b78cbab89\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30c8\u30ec\u30f3\u30c9<\/th><th>Eigen\u306e\u5bfe\u5fdc\u72b6\u6cc1<\/th><th>\u4eca\u5f8c\u306e\u5c55\u671b<\/th><\/tr><\/thead><tbody><tr><td>AI\/ML<\/td><td>\u57fa\u672c\u7684\u306a\u884c\u5217\u6f14\u7b97\u30b5\u30dd\u30fc\u30c8<\/td><td>\u30c7\u30a3\u30fc\u30d7\u30e9\u30fc\u30cb\u30f3\u30b0\u5411\u3051\u6700\u9069\u5316<\/td><\/tr><tr><td>\u30a8\u30c3\u30b8\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/td><td>\u8efd\u91cf\u5b9f\u88c5\u53ef\u80fd<\/td><td>\u7d44\u307f\u8fbc\u307f\u5411\u3051\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb<\/td><\/tr><tr><td>\u91cf\u5b50\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/td><td>\u7814\u7a76\u6bb5\u968e<\/td><td>\u5c02\u7528\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u958b\u767a<\/td><\/tr><tr><td>\u30d8\u30c6\u30ed\u30b8\u30cb\u30a2\u30b9\u8a08\u7b97<\/td><td>\u5b9f\u9a13\u7684\u30b5\u30dd\u30fc\u30c8<\/td><td>\u5b8c\u5168\u306a\u7d71\u5408\u3092\u76ee\u6307\u3059<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-78\">\u6280\u8853\u7684\u306a\u767a\u5c55\u306e\u65b9\u5411\u6027<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u6700\u9069\u5316\u306e\u5f37\u5316<\/li>\n\n\n\n<li>\u65b0\u3057\u3044\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3078\u306e\u5bfe\u5fdc<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u52b9\u7387\u306e\u6539\u5584<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6a5f\u80fd\u62e1\u5f35<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u3088\u308a\u9ad8\u5ea6\u306a\u6570\u5024\u89e3\u6790\u6a5f\u80fd<\/li>\n\n\n\n<li>\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u306a\u53ef\u8996\u5316\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u30af\u30e9\u30a6\u30c9\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u8005\u30a8\u30af\u30b9\u30da\u30ea\u30a8\u30f3\u30b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u3088\u308a\u76f4\u611f\u7684\u306aAPI\u30c7\u30b6\u30a4\u30f3<\/li>\n\n\n\n<li>\u30c7\u30d0\u30c3\u30b0\u30c4\u30fc\u30eb\u306e\u5f37\u5316<\/li>\n\n\n\n<li>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u5145\u5b9f\u5316<\/li>\n<\/ul>\n\n\n\n<p>Eigen\u306f\u3001\u3053\u308c\u3089\u306e\u9032\u5316\u3092\u901a\u3058\u3066\u3001\u79d1\u5b66\u6280\u8853\u8a08\u7b97\u306e\u4e2d\u6838\u7684\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u3057\u3066\u306e\u5730\u4f4d\u3092\u5f37\u5316\u3057\u3066\u3044\u304f\u3053\u3068\u304c\u671f\u5f85\u3055\u308c\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":{"0":"post-1619","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-cpp","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1619"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1619\/revisions"}],"predecessor-version":[{"id":1620,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1619\/revisions\/1620"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1619"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1619"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}