首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab rescale命令的特征等效项

Matlab rescale命令的特征等效项
EN

Stack Overflow用户
提问于 2019-05-14 00:12:15
回答 1查看 84关注 0票数 1

我想在Eigen中重新创建Matlab rescale命令

https://www.mathworks.com/help/matlab/ref/rescale.html

我试过翻译,但不太确定。我的本征知识还是太有限了。

代码语言:javascript
复制
  auto rescale = [&](
    Eigen::MatrixXd mat, 
    Eigen::VectorXd inmin,
    Eigen::VectorXd inmax,
    Eigen::VectorXd l,
    Eigen::VectorXd u
    ) -> Eigen::MatrixXd {

    auto val = l.array() + (
      ((mat - inmin).array()) / ((
        ((inmax - inmin).array()) * ((u - l).array())
      ).array())
    );

    return val;
  };

这是可行的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-14 01:57:14

不是的。你的尺寸不匹配。你把ArrayXdArrayXXd混在一起了。这更像是您想要的,一个版本用于标量,另一个版本用于向量。调整rowwise/colwise以匹配不同版本的matlabs rescale

代码语言:javascript
复制
#include <Eigen/Core>
#include <iostream>

int main()
{

    auto rescale = [&](
        Eigen::MatrixXd mat,
        double l,
        double u
        ) -> Eigen::MatrixXd {

        double min = mat.minCoeff();
        double max = mat.maxCoeff();
        auto val = l + (mat.array() - min) * ((u - l) / (max - min));
        return val;
    };

    Eigen::MatrixXd mat(4,4);
    Eigen::Map<Eigen::VectorXd>(mat.data(), mat.size()).setLinSpaced(1, mat.size());

    std::cout << mat << "\n\n";

    auto rescaled = rescale(mat, 2, 5);

    std::cout << rescaled << "\n\n";

    auto rescale2 = [&](
        Eigen::MatrixXd mat,
        Eigen::VectorXd l,
        Eigen::VectorXd u
        ) -> Eigen::MatrixXd {

        Eigen::ArrayXd  min = mat.colwise().minCoeff();
        Eigen::ArrayXd  max = mat.colwise().maxCoeff();
        auto val = l.array().replicate(1, mat.cols())
            + ((mat.array().rowwise() - min.transpose()).rowwise() * 
               ((u - l).array() / (max - min)).transpose());
        return val;
    };

    Eigen::VectorXd mn, mx;

    mn.resize(mat.cols());
    mx.resize(mat.cols());

    mn.setConstant(1.3);
    mx << 2, 5, 6, 9;
    rescaled = rescale2(mat, mn, mx);

    std::cout << rescaled << "\n\n";



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

https://stackoverflow.com/questions/56116182

复制
相关文章

相似问题

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