Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Eigen:调用lpNorm()的正确方法_C++_Eigen - Fatal编程技术网

C++ Eigen:调用lpNorm()的正确方法

C++ Eigen:调用lpNorm()的正确方法,c++,eigen,C++,Eigen,如何使用模板化矩阵作为输入调用lpNorm 以下是我的代码中的问题: template<class number> void normalize_in_place(Matrix<number,Dynamic,Dynamic> & A, level l, axis a){ const int p = lp_norms::level2pvalue(l); switch ( a ) { case row: // TODO: get lpn

如何使用模板化矩阵作为输入调用
lpNorm

以下是我的代码中的问题:

template<class number>
void normalize_in_place(Matrix<number,Dynamic,Dynamic> & A, level l, axis a){

  const int p = lp_norms::level2pvalue(l);
  switch ( a ) {
    case row: 
      // TODO: get lpnorm working. 
      A = A.transpose().cwiseQuotient(A.rowwise().lpNorm<p>()).transpose();
      //A = A.transpose().cwiseQuotient(A.rowwise().norm()).transpose();
      break;
    case col:
      // TODO: get lpnorm working. 
      //A = A.cwiseQuotient(A.colwise().lpNorm<p>());
      A = A.cwiseQuotient(A.colwise().norm());
      break;
  }
}
模板
在适当位置(矩阵和A,l层,A轴)进行空洞规格化{
const int p=lp_范数::level2pvalue(l);
开关(a){
案例行:
//TODO:让lpnorm正常工作。
A=A.transpose().cwisecontudy(A.rowwise().lpNorm()).transpose();
//A=A.transpose().cwisecontudy(A.rowwise().norm()).transpose();
打破
案例:
//TODO:让lpnorm正常工作。
//A=A.cWise商(A.colwise().lpNorm());
A=A.cWise商(A.colwise().norm());
打破
}
}
在编译过程中失败,原因是:

错误:在[lpNorm函数的右括号]之前应为主表达式

我用括号代替了编译器输出中的箭头

**在使用7月23日的版本刷新我的eigen之后,我得到以下错误:


错误:如果模板中有此代码,且
a
的类型取决于模板参数,则类型为“”和“const int”的操作数对二进制运算符无效:

A.rowwise().lpNorm<p>();


没有
模板
关键字,如果模板中有
代码,而
a
的类型取决于模板参数,则GCC会尝试处理

A.rowwise().lpNorm<p>();


在没有
模板
关键字的情况下,GCC试图处理
是否存在
rwiseQuotient
甚至存在@是的,更新了。这仍然不是一个MCVE(如果没有
级别
等的定义,怎么能编译它?),但足以回答问题。
rwisecontudy
是否存在@是的,更新了。这仍然不是一个MCVE(如果没有
级别
等的定义,如何编译它?),但足以回答。好的,太好了,那么你告诉我的是,我需要一个编译开关,用于所有
p
值的选择,对吗?有两个部分:1<代码>模板
关键字,2
p
必须是常量表达式(我刚刚添加到我的答案中)。我不知道什么是
级别l
,但一个解决方案可能是将其作为模板参数。啊,好的,我看到您已经更新以回答我的问题。因此,我不可能在没有宏和重新编译的情况下,向使用Eigen lpNorm的最终用户提供lpNorm的可能范围。如果编译时不知道
p
,则不可能调用Eigen的
lpNorm()
。即使在您的情况下,也可能在编译时知道
p
:调用
的代码是否在编译时就地规范化
know
l
?否则请注意,Eigen的
lpNorm
模板实际上只是在几个函数之间进行选择(对于
p
=1、2和无穷大的特殊情况,以及其他
p
的一般情况),最坏情况下,您可以编写自己的
lpNorm
版本,以检查p在运行时是否为无穷大。是的,这是我的计划。在我看来,除了1、2和无穷大之外,其他情况没有多大用处;但是一个精通数学的用户,如果不知道代码(或一般代码)是如何工作的,可能会喜欢在这些输入上乱动。所以我可以自己实现内部案例。好的,很好,那么你告诉我的是,我需要一个编译开关,用于所有
p
值的选择,对吗?有两个部分:1<代码>模板
关键字,2
p
必须是常量表达式(我刚刚添加到我的答案中)。我不知道什么是
级别l
,但一个解决方案可能是将其作为模板参数。啊,好的,我看到您已经更新以回答我的问题。因此,我不可能在没有宏和重新编译的情况下,向使用Eigen lpNorm的最终用户提供lpNorm的可能范围。如果编译时不知道
p
,则不可能调用Eigen的
lpNorm()
。即使在您的情况下,也可能在编译时知道
p
:调用
的代码是否在编译时就地规范化
know
l
?否则请注意,Eigen的
lpNorm
模板实际上只是在几个函数之间进行选择(对于
p
=1、2和无穷大的特殊情况,以及其他
p
的一般情况),最坏情况下,您可以编写自己的
lpNorm
版本,以检查p在运行时是否为无穷大。是的,这是我的计划。在我看来,除了1、2和无穷大之外,其他情况没有多大用处;但是一个精通数学的用户,如果不知道代码(或一般代码)是如何工作的,可能会喜欢在这些输入上乱动。因此,我可以自己实施内部案例。