【发布时间】:2018-01-14 06:25:59
【问题描述】:
我做了一个MATLAB 代码,它必须执行
B3=abs(B2/max(B2));
其中B2 是181 x 238 矩阵,max(B2) 应该给我一个1 x 238 的矩阵,其中包含每列中的最大值,B3 应该是181x1matrix。使用 Eigen 库的等效 C++ 代码应该是什么?请帮忙。
在修改我的代码时,用更简单的维度说 2 x 2 矩阵
//problem
#include <iostream>
#include<complex.h>
#include <eigen3/Eigen/Dense>
#include <eigen3/Eigen/Core>
using namespace Eigen;
using namespace std;
using Eigen::MatrixXd;
int main()
{
MatrixXd A(2,2);MatrixXd B(2,1);MatrixXd C(1,2);
A<<4,12,
6,8;
C=A.colwise().maxCoeff();
//B=(A*(1.0/C)).cwiseAbs();
B=A.array()/C.array();
cout << "The solution is A :\n" << B.cwiseAbs()<< endl;
return 0;
}
但我无法执行此代码。
hp@hp-HP-Notebook:~/beamforming/programs/eigen_prog$ g++ mm_t.cpp -o mm_t
hp@hp-HP-Notebook:~/beamforming/programs/eigen_prog$ ./mm_t mm_t: /usr/local/include/eigen3/Eigen/src/Core/CwiseBinaryOp.h:110: Eigen::CwiseBinaryOp::CwiseBinaryOp(const Lhs&, const Rhs&, const BinaryOp&) [with BinaryOp = Eigen::internal::标量商操作; LhsType = const Eigen::ArrayWrapper >; RhsType = const Eigen::ArrayWrapper >;特征::CwiseBinaryOp::Lhs = 特征::ArrayWrapper >; Eigen::CwiseBinaryOp::Rhs = Eigen::ArrayWrapper >]: 断言 `aLhs.rows() == aRhs.rows() && aLhs.cols() == aRhs.cols()' 失败。 中止(核心转储)
知道有什么问题吗? 我在我的 MATLAB 命令窗口中进行了简单的执行,以简化我想要得到的输出。
m=[4,12;6,8]
m =
4 12
6 8
最大(米)
ans = 6 12
abs(m/max(m))
ans =
0.9333
0.7333
我被这个问题困扰了很长时间。请帮忙。
【问题讨论】:
-
maxCoeff() 返回整个矩阵中的最大元素。但是在 MATLAB max(A) 中,其中 A 是矩阵,应该给出包含每列最大值的行向量。我对我的问题进行了更改,更清楚地表明了我的矩阵尺寸
-
A * C.asDiagonal().inverse()?其实我不知道你的abs是什么意思,所以这只是一个随机的建议,可能是错误的。 -
Y = abs( X ) 返回数组 X 中每个元素的绝对值。如果 X 是复数,abs(X) 返回复数幅度。不,这仍然会导致 2 x 2 矩阵 0.666667 1 1 0.666667
-
那是你的划分混乱了,你真的应该解释一下每个操作的含义......