如何获得特征矩阵的形状(尺寸)?
How to get shape (dimensions) of an Eigen matrix?
我要从 Python & Numpy 转到 C++ & Eigen。
在 Python 中,我可以使用 .shape
属性获取 Numpy array/matrix 的形状(尺寸),如下所示:
import numpy as np
m = np.array([ [ 1, 2, 3], [10, 20, 30] ])
print(m)
# [[ 1 2 3]
# [10 20 30]]
print(m.shape)
# (2, 3)
现在,当我使用 Eigen 时,似乎没有任何属性或方法来检索形状。最简单的方法是什么?
#include <iostream>
#include "Eigen/Dense"
using std::cout;
using std::endl;
using std::string;
using Eigen::MatrixXd;
int main(int argc, char**argv)
{
MatrixXd m(2, 3);
m << 1, 2, 3, 10, 20, 30;
cout << m << endl;
// 1 2 3
// 10 20 30
cout << "shape: " << WHAT DO I PUT HERE? << endl;
return 0;
}
您可以分别使用 .rows()
和 .cols()
方法从特征矩阵中检索行数和列数。
下面是一个函数get_shape()
,returns一个string
矩阵形状的表示;它包含类似于 Numpy 的 .shape
属性的信息。
EigenBase
类型允许函数接受 MatrixXd
或 VectorXd
。
#include <iostream>
#include <sstream> // <-- Added
#include "Eigen/Dense"
using std::cout;
using std::endl;
using std::string;
using std::ostringstream; // <-- Added
using Eigen::MatrixXd;
using Eigen::EigenBase; // <-- Added
template <typename Derived>
std::string get_shape(const EigenBase<Derived>& x)
{
std::ostringstream oss;
oss << "(" << x.rows() << ", " << x.cols() << ")";
return oss.str();
}
int main(int argc, char**argv)
{
MatrixXd m(2, 3);
m << 1, 2, 3, 10, 20, 30;
cout << "shape: " << get_shape(m) << endl;
// shape: (2, 3)
return 0;
}
我要从 Python & Numpy 转到 C++ & Eigen。
在 Python 中,我可以使用 .shape
属性获取 Numpy array/matrix 的形状(尺寸),如下所示:
import numpy as np
m = np.array([ [ 1, 2, 3], [10, 20, 30] ])
print(m)
# [[ 1 2 3]
# [10 20 30]]
print(m.shape)
# (2, 3)
现在,当我使用 Eigen 时,似乎没有任何属性或方法来检索形状。最简单的方法是什么?
#include <iostream>
#include "Eigen/Dense"
using std::cout;
using std::endl;
using std::string;
using Eigen::MatrixXd;
int main(int argc, char**argv)
{
MatrixXd m(2, 3);
m << 1, 2, 3, 10, 20, 30;
cout << m << endl;
// 1 2 3
// 10 20 30
cout << "shape: " << WHAT DO I PUT HERE? << endl;
return 0;
}
您可以分别使用 .rows()
和 .cols()
方法从特征矩阵中检索行数和列数。
下面是一个函数get_shape()
,returns一个string
矩阵形状的表示;它包含类似于 Numpy 的 .shape
属性的信息。
EigenBase
类型允许函数接受 MatrixXd
或 VectorXd
。
#include <iostream>
#include <sstream> // <-- Added
#include "Eigen/Dense"
using std::cout;
using std::endl;
using std::string;
using std::ostringstream; // <-- Added
using Eigen::MatrixXd;
using Eigen::EigenBase; // <-- Added
template <typename Derived>
std::string get_shape(const EigenBase<Derived>& x)
{
std::ostringstream oss;
oss << "(" << x.rows() << ", " << x.cols() << ")";
return oss.str();
}
int main(int argc, char**argv)
{
MatrixXd m(2, 3);
m << 1, 2, 3, 10, 20, 30;
cout << "shape: " << get_shape(m) << endl;
// shape: (2, 3)
return 0;
}