mat*_*ick 29 python numpy decimal
Nimaly中是否有十进制dtypes?
>>> import decimal, numpy
>>> d = decimal.Decimal('1.1')
>>> s = [['123.123','23'],['2323.212','123123.21312']]
>>> ss = numpy.array(s, dtype=numpy.dtype(decimal.Decimal))
>>> a = numpy.array(s, dtype=float)
>>> type(d)
<class 'decimal.Decimal'>
>>> type(ss[1,1])
<class 'str'>
>>> type(a[1,1])
<class 'numpy.float64'>
Run Code Online (Sandbox Code Playgroud)
我想numpy.array不支持每个dtype,但我认为只要正确的操作被定义,它至少会让dtype尽可能地传播.我错过了什么吗?这有什么办法吗?
AFo*_*lia 23
Numpy不会将decimal.Decimal识别为特定类型.它最接近的是最常见的dtype,object.因此,在将元素转换为所需的dtype时,转换是无操作的.
>>> ss.dtype
dtype('object')
Run Code Online (Sandbox Code Playgroud)
请记住,因为数组的元素是Python对象,所以使用它们的速度不会太快.例如,如果您尝试将其添加到任何其他数组,则必须将其他元素装箱回到python对象中,并通过普通的Python添加代码添加.你可能会获得一些速度,因为迭代将在C中,但不是那么多.
Ofr*_*viv 10
不幸的是,在创建numpy.array时,必须将每个项目转换为Decimal.就像是
s = [['123.123','23'],['2323.212','123123.21312']]
decimal_s = [[decimal.Decimal(x) for x in y] for y in s]
ss = numpy.array(decimal_s)
Run Code Online (Sandbox Code Playgroud)
重要的CAVEAT:这是一个不好的答案
所以在我真正理解它之前我回答了这个问题.答案被接受,并有一些赞成,但你可能最好跳到下一个.
原始答案:
它似乎Decimal可用:
>>> import decimal, numpy
>>> d = decimal.Decimal('1.1')
>>> a = numpy.array([d,d,d],dtype=numpy.dtype(decimal.Decimal))
>>> type(a[1])
<class 'decimal.Decimal'>
Run Code Online (Sandbox Code Playgroud)
我不确定你要完成什么,你的例子比简单地创建一个十进制numpy数组更复杂.
| 归档时间: |
|
| 查看次数: |
31795 次 |
| 最近记录: |