C++ 中是不是有与 python 中的 astype() 函数等效的函数?

Posted

技术标签:

【中文标题】C++ 中是不是有与 python 中的 astype() 函数等效的函数?【英文标题】:Is there any equivalent function in C++ as the astype() function in python?C++ 中是否有与 python 中的 astype() 函数等效的函数? 【发布时间】:2016-03-09 23:46:38 【问题描述】:

我正在寻找一个函数,它可以将数组的每个元素转换为 c++ 中的浮点类型(就像 astype() 在 python 中所做的那样)。 你知道吗?

谢谢

【问题讨论】:

没有。原始类型不是多态的。 std::static_cast<float>(whatever). 我需要一个函数将数组的每个元素转换为浮点数。 @mzar 像float[] float_arr = cast_to_floats(int_arr); 这样的东西不起作用,因为你不能分配给数组。 能否贴出实际代码和错误信息? 【参考方案1】:

您可以将单个项目投射到float,但不能一次投射整个数组。

您可以很容易地创建一个包含原始数组中的值的floats 向量,并将每个值单独转换为float 类型:

template <class T, size_t N>
std::vector<float> asFloat(T (&input)[N]) 
    return std::vector<float> input, input+N;

但是请注意,这会创建一个由原始数组中的值创建的 float 值的新数组,而根本不会更改/影响原始数组。另请注意,由于这是一个模板,因此可以将其应用于定义了从 T 到 float 的转换的任何类型,即使该转换可能没有多大意义或产生特别有用的结果(例如, char):

char input[] =  'a', 'b', 'c' ;

auto result = asFloat(input);

如果您打印出result 的内容,您通常会得到:

97      98      99

这是大多数常见字符集(ASCII、Unicode 等)中abc 的编码,但这些作为浮点值并没有多大意义。

然而,基于 cmets,您只是试图创建一个 float 数组。这里有几个小细节需要处理。一是你可能真的想要一个vector 而不是一个数组。另一个是浮点字面量默认为double 类型。使用 double 值初始化 float 变量可能(并且经常会)导致警告可能会丢失数据或类似情况。

因此,当您初始化 float 的数组或向量时,您通常希望包含一个后缀以强制将值键入 float

std::vector<float> values  1.0f, 2.0f, 3.0f;

【讨论】:

以上是关于C++ 中是不是有与 python 中的 astype() 函数等效的函数?的主要内容,如果未能解决你的问题,请参考以下文章

R 是不是有与 Python 中的 reduce() 等价的东西?

Scala 中是不是有与 Python 更通用的 map 函数等价的功能?

在 C++/STL 中是不是有与 Python range() 等效的紧凑函数

pandas 中是不是有与 excel 中的 MATCH 函数等效的函数?

OpenSL ES 中是不是有与 OpenAL <alc.h> 等效的版本?

是否有与 Ruby 符号等效的 Python?