【问题标题】:How to reshape vector in C++?如何在 C++ 中重塑向量?
【发布时间】:2018-07-05 15:08:24
【问题描述】:

我想在 MN 个元素的矩阵中重塑一个 P*1 个元素的向量,其中 P = MN。使用数字,我有一个 143360 的向量,我想以最简单的方式将其重塑为 224*640 元素的矩阵。我真的是 C++ 新手。

谢谢

【问题讨论】:

  • 最简单的方法是对相同的数据有不同的视图(简单地存储为线性数组)。无论如何,你尝试了什么? SO 不是代码编写服务,因此您需要付出一些努力才能在这里获得帮助

标签: c++ matrix vector reshape


【解决方案1】:

编写一个包装向量的类。

一些提示:

  • 向量(或对它的引用)应该是成员
  • 您节省了行数和列数
  • 您访问元素(j,i),例如通过返回向量的元素j*columns+i
  • 访问器函数可以具有相同的名称,例如const T& operator()(std::size_t j, std::size_t i) const 用于 getter 和 T& operator()(std::size_t j, std::size_t i)` 用于设置某些元素的函数。两者兼有的优势在于,您可以在将矩阵作为 const 传递时使用 getter。
  • 如前所述,您可能希望对类进行模板化,以便将其与多种数据类型一起使用。

【讨论】:

    【解决方案2】:

    回答您的问题:如果您的矩阵大小不固定,您可以使用std::vector 来存储数据。如果已修复,您可以使用std::array

    然后你可以写一个像这样的getter

    double get_component(std::size_t c1, std::size_t c2){
        return matrix [ c1 * M + c2 ];
    }
    

    但是:我建议查看线性代数库,例如 EigenAmadrillo。它们提供您渴望的可用性,并提供高度精细的存储和计算能力。我怀疑您能否超越这些库的性能。

    【讨论】:

    • "如果已修复,您可以使用std::vector。"这是真的,但我强烈怀疑你的意思是“......可以使用std::array”:-)
    • 另外,return 语句中缺少)(实际上应该是[])。
    • @MartinBonner 你是完全正确的。我编辑了我的答案。
    • 也不清楚 getter 应该属于哪个类? std::vector ?当然不是,但答案是不完整的
    猜你喜欢
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 2014-01-15
    • 2012-02-21
    相关资源
    最近更新 更多