【问题标题】:How do I compute absolute value of vector? [closed]如何计算向量的绝对值? [关闭]
【发布时间】:2015-11-02 02:42:07
【问题描述】:
 std::vector<float> a {-0.2, 2.0, -0.9, 2.4, 22.0}

如何取所有向量元素的绝对值?

结果应该是

{0.2, 2.0, 0.9, 2.4, 22.0}

【问题讨论】:

标签: c++ vector


【解决方案1】:

此代码将帮助您,循环矢量并应用 abs(查找绝对值的函数)

   for(unsigned int i = 0; i < numbers.size(); i++)
    {
        if(numbers[i] < 0)numbers[i] *= -1; //make positive.    _OR_   use numbers[i] = abs(numbers[i]);
        std::cout<<numbers[i]<<std::endl;
    }

【讨论】:

  • 或用于 C++11 的范围:for (auto&amp; f : numbers) { f = f &lt; 0 ? -f : f;}
  • std::vector absvalues(a.size()); std::transform(a.begin(), a.end(), absvalues.begin(), [](double coeff) { return std::abs(coeff); } );
【解决方案2】:

Use the formula |a| = sqrt(sum(ai*ai)):

float value = 0.0;
for(int i = 0; i < a.size(); i++) value += a[i] * a[i];
value = sqrt(value);

【讨论】:

  • 我的数学课是前一阵子了,但不应该是|a| = sqrt(总和(abs(ai)*abs(aj)))。否则,当取负值的 sqrt 时,您可能会遇到异常。 (加上结果可能是错误的)
  • 看来这不是OP想要的。您计算距离,而 OP 想要修改其向量以具有正浮点数。
  • ai*ai = abs(ai)*abs(ai),不是吗?
  • @Jarod42 哎呀。标题让我有点困惑。它说absolute value of vector,导致了这个答案。
  • 是的,这很好。问题是当您在同一表达式的不同部分访问相同的标量值两次或多次时,其中一次或多次访问是修改。 (实际的规则并没有那么严格,但遵循 imo 是一个很好的规则,它避免了这个特定品牌的 UB)。
【解决方案3】:

您可以使用以下代码。

#include <iostream>
#include <string>
#include <cstring>
#include <vector>

using namespace std;

void v_abs( vector <int>  &x, double p[]) 
{ 
    int i=0; 


    while( p[i] < x.size () ) 
    { 
        if ( p[i] < 0 )
        { 
            p[i] *= -1 ; 
         } 
             i ++; 
    }
}

int main() {
    cout << v_abs << endl;
    system("pause");
    return 0;
}

【讨论】:

  • 如果第一个值 >= 0,这将导致无限循环。也不是你如何找到向量的绝对值。
  • 已更正。感谢您指出。
  • 你的函数打印地址,你不要调用它。
  • 你的签名很奇怪......向量+ c-array(并且只有向量的大小用于向量......)
  • system("pause") 是特定于平台的 ...
【解决方案4】:

您创建一个函数,接收向量作为输入并返回另一个向量:

const std::vector< float >& absValues(std::vector< float >& vecIn)
{
   for(float &val : vecIn)
   {
      if (val < 0)
      {
          val *= -1;
      }
   }

   return vecIn;
}

如果你想要向量的所有元素之和的 sqrt,那么你应该这样做as John Bupit said(恕我直言很好)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2018-07-14
    • 2020-01-31
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多