首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中将Matlab中的下列矩阵代码转换为特征的问题

在C++中将Matlab中的下列矩阵代码转换为特征的问题
EN

Stack Overflow用户
提问于 2013-10-26 19:29:07
回答 2查看 629关注 0票数 0

H,W,R,V是矩阵,并且已经用各自的大小初始化。"beta“是一个int,”myep“是一个浮点。对于矩阵实现,我目前使用了特征库。但是,我不确定将此Matlab代码成功转换为基于特征的C++代码的语法。

Matlab代码

代码语言:javascript
复制
H = H .* ( (W'*(R.^(beta-2) .* V)) ./ max(W'*R.^(beta-1), myeps) ); 

C++代码(我迄今所做的尝试)

代码语言:javascript
复制
WH = W_ * H_;

Eigen::MatrixXf j=(W_.transpose().array()*(WH.array().pow((beta2)).cwiseProduct(V.array())));

Eigen::MatrixXf k=(W_.transpose().array()*((WH.array().pow(beta-1))));

float m=max(k.maxCoeff(),0.001);

H_ = H_.cwiseProduct(j/m);

这个代码正确吗?

FYI -这是NMF算法(基于β发散的非负矩阵分解)中的一个步骤.

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-27 20:53:55

这似乎不对。数组上的*相当于一个cwiseProduct,而您想要一个带有W'的矩阵产品。提议:

代码语言:javascript
复制
Eigen::MatrixXf j = (W.transpose() * (R.array().pow(beta-2)*V.array()).matrix());
Eigen::MatrixXf k = (W.transpose() *  R.array().pow(beta-1).matrix());
H = H.cwiseProduct(j/max(k.maxCoeff(),myeps));
票数 1
EN

Stack Overflow用户

发布于 2013-10-26 19:47:27

我建议您看一下这个快速引用:

http://eigen.tuxfamily.org/dox/AsciiQuickReference.txt

它包含特征和Matlab之间的映射。

例如:

代码语言:javascript
复制
R = P.cwiseProduct(Q);    // R = P .* Q

代码语言:javascript
复制
R.array().square()        // P .^ 2

正如你所看到的,这个罗塞塔·斯通可以帮你翻译你的表达。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19610944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档