我只是在玩数字游戏。

我发现Numpy提供了一个名为np.vectorize的函数,允许您获取一个函数并将其应用于Numpy数组。

在[23]中:import numpy as np

import decimal

D = decimal.Decimal

我们将创建一个常规的np浮点数组

在[24]中:f10 = np.random.ranf(10)

f10

出[24]:array([ 0.45410583, 0.35353919, 0.5976785 , 0.12030978, 0.00976334,

0.47035594, 0.76010096, 0.09229687, 0.24842551, 0.30564141])

尝试使用np.asarray将数组转换为十进制类型不起作用。似乎尝试使用np.asarray并指定decimal.decimal类型会将数组设置为预期的object,但如果实际访问数组的单个元素,则它仍然具有float数据类型。

在[25]中:f10todec = np.asarray(f10, dtype = decimal.Decimal)

print f10todec.dtype, f10todec

print type(f10todec[0])

object [0.454105831376884 0.3535391906233327 0.5976785016396975 0.1203097778312584

0.009763339031407026 0.47035593879363524 0.7601009625324361

0.09229687387940333 0.24842550566826282 0.30564141425653435]

如果给np.array一个十进制类型的同质python列表,则它似乎保留了该类型,请参阅下面的列表理解,以获得第一个数组中作为十进制数据类型的值的列表。所以我不得不这样做十进制数组。

在[26]中:D10 = np.array([D(d) for d in f10])

D10

出[26]:array([Decimal('0.4541058313768839838076019077561795711517333984375'),

Decimal('0.35353919062333272194109667907468974590301513671875'),

Decimal('0.597678501639697490332991947070695459842681884765625'),

Decimal('0.12030977783125840208100498784915544092655181884765625'),

Decimal('0.00976333903140702563661079693702049553394317626953125'),

Decimal('0.47035593879363524205672320022131316363811492919921875'),

Decimal('0.76010096253243608632743644193396903574466705322265625'),

Decimal('0.09229687387940332943259136300184763967990875244140625'),

Decimal('0.24842550566826282487653543284977786242961883544921875'),

Decimal('0.30564141425653434946951847450691275298595428466796875')], dtype=object)

基本的数学运算似乎没问题

在[27]中:D10/2

出[27]:array([Decimal('0.2270529156884419919038009539'),

Decimal('0.1767695953116663609705483395'),

Decimal('0.2988392508198487451664959735'),

Decimal('0.06015488891562920104050249392'),

Decimal('0.004881669515703512818305398469'),

Decimal('0.2351779693968176210283616001'),

Decimal('0.3800504812662180431637182210'),

Decimal('0.04614843693970166471629568150'),

Decimal('0.1242127528341314124382677164'),

Decimal('0.1528207071282671747347592373')], dtype=object)

在[28]中:np.sqrt(D10)

出[28]:array([Decimal('0.6738737503248542354573624759'),

Decimal('0.5945916166776426405934196108'),

Decimal('0.7730966961769384578392278689'),

Decimal('0.3468569991095154505863255680'),

Decimal('0.09880961001545864636229121433'),

Decimal('0.6858250059553349663476168402'),

Decimal('0.8718376927688066448819998853'),

Decimal('0.3038040057000620415496242404'),

Decimal('0.4984230187985531079935481296'),

Decimal('0.5528484550548498633920483390')], dtype=object)

在尝试十进制模块中没有对应函数的trig函数之前

在[29]中:np.sin(D10)

---------------------------------------------------------------------------

AttributeError Traceback (most recent call last)

in ()

----> 1 np.sin(D10)

AttributeError: 'Decimal' object has no attribute 'sin'

所以让我们使用np.vectorize,这样我们就可以使用decimal的量化函数来进行舍入。In [30]:

npquantize = np.vectorize(decimal.Decimal.quantize)

qnt_D10 = npquantize(D10, D('.000001'))

qnt_D10

Out[30]:

array([Decimal('0.454106'), Decimal('0.353539'), Decimal('0.597679'),

Decimal('0.120310'), Decimal('0.009763'), Decimal('0.470356'),

Decimal('0.760101'), Decimal('0.092297'), Decimal('0.248426'),

Decimal('0.305641')], dtype=object)

您还需要注意一些常规的python数学函数,因为它们会自动将返回类型更改为float。我假设这是因为这个数不能基于SIN或COS这样的函数来精确计算。

所以我猜简单的答案是使用列表理解来获取numpy数组中的项并将其转换为python列表,然后从小数列表中创建该数组。

要返回类型完整的numpy数组,我想您可以使用vectorize函数包装任何使用Decimal类型的函数以应用于np数组。

python decimal 转换为float_在Python中将float转换为decimal类型相关推荐

  1. python中float转int_在python中将float转换为int的有效方式是什么?

    用时间测试: $bin/python -mtimeit -n10000000 -s 'n = 1.345' 'int(n)' 10000000 loops, best of 3: 0.234 usec ...

  2. java中将int转换float_在java中将float和double转换为int时有什么区别?

    我用这些语句来测试 float f=4.35f; int i=(int)(f*100); System.out.println(i); double d=4.35; i=(int)(d*100); S ...

  3. php将字符串转换为json格式,js中将字符串转换为json格式的三种方法

    json在js的开发过程中经常会用到,像在使用ajax开发的项目过程中,经常需要将json格式的字符串返回到前端,前端解析成json对象. 下面为大家介绍下将字符串转换为json对象的三种常用的方法: ...

  4. java中true转换为int_在Java中将字节转换为int的最优雅的方式

    示例代码: int a = 255; byte b = (byte) a; int c = b & 0xff; // Here be dragons System.out.println(a) ...

  5. java 将单词转换为_在Java中将单词转换为数字

    我已经看到很多算法,你给它们一个数字说"123",它将它转换为123.但我似乎无法找到相反的东西,而我确实找到的只能达到数字1000,任何人都可以用正确的方式指导我,因为我可以做的 ...

  6. c#将字符串转换为数组,在C#中将字符串转换为字节数组

    先决条件:如何在C#中声明和使用byte []? C#中的字符串到字节数组的转换 在C#中,可以使用Encoding将字符串转换为字节数组.方法,它接受字符串作为参数并返回字节数组.ASCII.Get ...

  7. 在C ++中将二进制转换为十进制

    Here you will learn how to convert binary to decimal in C++. 在这里,您将学习如何在C ++中将二进制转换为十进制. We can conv ...

  8. java float转换_Java float转换为String

    Java将float转换为String 我们可以使用String.valueOf()和Float.toString()方法在Java中将float转换为String. 情境 如果必须在文本字段中显示浮 ...

  9. 在C ++中将十进制转换为二进制

    Here you will get program to convert a number from decimal to binary in C++. 在这里,您将获得在C ++中将数字从十进制转换 ...

最新文章

  1. MongoDB 安全权限访问控制
  2. 2021-2027全球与中国创建和销售在线课程平台市场现状及未来发展趋势
  3. 计算机在足球中的应用,人工智能在机器人足球赛中的应用
  4. InTouch蜂鸣器报警提示方法
  5. java CreateProcess error=740 请求的操作需要提升的问题
  6. 知乎上看到一篇有关三门问题比较好的讲解
  7. try catch 用法
  8. Spring Security OAuth2 实现使用JWT
  9. C# “贝格尔”编排法
  10. LQ0116 方格计数【数学计算】
  11. Win7(32bit) + VS2012 + Qt
  12. c#接口是什么,为什么要用接口
  13. 奥比中光 astra 乐视三合一体感摄像头采集深度图彩色图并保存
  14. solidity 安全 合约的短地址攻击——这个锅谁来背
  15. 都是坑啊!银行为什么要以科技岗招人然后让人干两年柜员?
  16. 上海诺基亚贝尔-S-010W-AV2B卡刷固件包
  17. MyBatis框架部署
  18. OTB100数据集序列分类
  19. 【大数据分析常用算法】6.共同好友
  20. 警惕! ”黑帽子“的社会工程学攻击

热门文章

  1. MySQL的嵌套查询
  2. c语言程序设计五子棋论文,C语言程序设计 课程设计(论文) 五子棋游戏
  3. 一文深度解读音视频行业技术发展历程
  4. C++菜鸟进阶之破解vs2010
  5. 2021年PMP考试考场公布
  6. 通过PPG“神话” 论服装电子商务
  7. python如果获取windows管理员权限(二)
  8. REW软件介绍 硬件软件需求 room eq wizard 5.20.13音频测试测量软件
  9. MergeSort和QuickSort的比较
  10. JDK10新特性讲解