python - 将 numpy 数组从对象 dtype 转换为 float

标签 python numpy

如何转换 foll.从对象 dtype 到 float 的 numpy:

array(['4,364,541', '2,330,200', '2,107,648', '1,525,711', '1,485,231',
       '1,257,500', '1,098,200', '1,065,106', '962,100', '920,200',
       '124,204', '122,320', '119,742', '116,627', '115,900', '108,400',
       '108,400', '108,000', '103,795', '102,900', '101,845', '100,900',
       '100,626'], dtype=object)

我尝试了 arr.astype(float) 但由于每个字符串中的 , 而无法正常工作。

最佳答案

另一种方式

np.frompyfunc(lambda x: x.replace(',',''),1,1)(arr).astype(float)

frompyfunc 返回一个对象 dtype 数组,这在这种情况下很好。我经常发现它比列表理解快 2 倍,但这里它的时间与 @coldspeed's 大致相同:

np.array([v.replace(',', '') for v in arr], dtype=np.float32)

这可能是因为我们从一个对象数据类型数组开始。对象 dtype 上的直接迭代比列表上的迭代慢一点,但比常规 numpy 数组上的迭代快。与列表一样,数组的元素是指向字符串的指针,不需要像字符串 dtype 数组那样进行“拆箱”。

(比 np.char 版本快 2 到 3 倍)。

关于python - 将 numpy 数组从对象 dtype 转换为 float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51576008/

相关文章:

python - python如何在两个类之间相互调用?

python - Jinja2:如何在包含的模板、可扩展模板中使用命名 block

python - 如何高效使用numpy进行迭代求和

python - 将数组切片为阶梯式连续 block 的 Python 方式是什么?

python - 将函数应用于 4d 数组的每个维度,在 python 中返回 4d 数组

Python - 格式化字符串中的变量

python - 使用 BeautifulSoup 抓取预标记内的文本

python - "Expected string or bytes-like object"对元组使用 re.match()

python - 通过另一个数组的属性选择二维数组的几个部分

python - 使用 2 维数组切片 3 维数组