python中科学计数法怎么表示,在python中将数组的元素从科学计数法转换为十进制计数法...

I have a numpy array come of whose elements are in scientific format and I want to convert them into decimal format. My numpy array looks like this:

[array([ 93495052.96955582, 98555123.06146193])]

[array([ 1.00097681e+09, 9.98276347e+08])]

[array([ 6.86812785e+09, 6.90391125e+09])]

[array([ 7.75127468e+08, 8.02369833e+08])]

and this is formed using this line in my code:

list1.append(np.array(regr.predict(data),dtype = np.float))

Now I want to convert elements in list1 from scientific format to decimal format. I looked around for some solution and found out that print format(0.00001357, 'f') converts numbers from scientific format to decimal format but how do I use it to convert elements of my array?

解决方案

First off, as several people have noted, there's a very large difference between how the numbers are displayed and how they're stored.

If you want to convert them to strings, then use '{:f}'.format(x) (or the % equivalent).

However, it sounds like you're only wanting the numbers to be displayed differently when you're working interactively (or through a print statement).

Changing how numpy arrays are printed

The way that numpy arrays are displayed interactively is controlled by numpy.set_printoptions.

Note that this does not convert the numbers to strings or change them in any way.

As a quick example:

In [1]: import numpy as np

In [2]: x = 1e9 * np.random.random(5)

In [3]: x

Out[3]:

array([ 4.96602724e+08, 5.42486095e+08, 4.74495681e+08,

7.37709684e+07, 9.75410927e+08])

In [4]: np.set_printoptions(formatter={'float_kind':'{:f}'.format})

In [5]: x

Out[5]:

array([496602723.824146, 542486095.316912, 474495680.688025,

73770968.413642, 975410926.873148])

We've only changed how numpy will display the numbers. They're still floats.

We can operate on them mathematically, and they'll behave like numbers:

In [6]: x[0]

Out[6]: 496602723.82414573

In [7]: x[0] * 2

Out[7]: 993205447.64829147

Converting to strings

Now let's say we had converted them to a list of strings:

In [1]: import numpy as np

In [2]: x = 1e9 * np.random.random(5)

In [3]: x

Out[3]:

array([ 2.56619581e+08, 2.55721261e+08, 3.36984986e+08,

2.67541556e+08, 9.01048842e+08])

In [4]: x = ['{:f}'.format(item) for item in x]

In [5]: x

Out[5]:

['256619580.697790',

'255721261.271977',

'336984986.430552',

'267541556.373619',

'901048842.193849']

Now they're a list of strings. If we operate on them mathematically, they'll behave like strings, not numbers:

In [6]: x[0] * 2

Out[6]: '256619580.697790256619580.697790'

Controlling how numpy arrays are saved with savetxt

Finally, if you're using numpy.savetxt, and would like to control how the data is output to disk, consider using the fmt parameter instead of manually converting elements of the array to strings.

For example, if we were to do:

np.savetxt('temp.txt', x)

By default, the ascii representation of the array would use scientific notation if it is more compact:

8.702970453168644905e+08

9.991634082796489000e+08

5.032002956810175180e+08

2.382398232565869987e+08

1.868727085152311921e+08

However, we can control that using fmt. Note that it expects the "old-style" % formatting strings:

np.savetxt('temp2.txt', x, fmt='%f')

And we'll get:

870297045.316864

999163408.279649

503200295.681018

238239823.256587

186872708.515231

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值