在python中将数组的元素从科学记数法转换为十进制记法

时间:2015-09-17 16:55:19

标签: python arrays numpy

我有一个numpy数组,其元素是科学格式,我想将它们转换为十进制格式。我的numpy数组看起来像这样:

[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])]

这是在我的代码中使用这一行形成的:

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

现在我想将list1中的元素从科学格式转换为十进制格式。我四处寻找解决方案并发现print format(0.00001357, 'f')将数字从科学格式转换为十进制格式但是如何使用它来转换我的数组元素?

2 个答案:

答案 0 :(得分:10)

首先,有几个人已经注意到,数字的显示方式和存储方式之间存在很大的差异。

如果您想将它们转换为字符串,请使用db.yourcollection.aggregate([ { "$unwind" : "$inner_array" }, { "$group" : { "_id" : "$_id", "totalCount" : { "$sum" : { "$cond" : { "if" : { "$eq" : [ "$inner_array.object_value", 1 ] }, "then" : 1, "else" : 0 } } }, "inner_array" : { "$push" : { "object_value" : "$inner_array.object_value" } } }}, { "$sort" : { "totalCount" : 1 } }, { "$project" : { "inner_array" : 1 }} ]) (或等效的$unwind)。

然而,听起来你只是希望在交互式工作时(或通过'{:f}'.format(x)语句)以不同的方式显示数字。

更改%数组的打印方式

交互式显示numpy数组的方式由numpy.set_printoptions控制。

请注意,这不会将数字转换为字符串或以任何方式更改它们。

作为一个简单的例子:

print

我们只更改了numpy显示数字的方式。它们仍然漂浮着。

我们可以用数学方法对它们进行操作,它们的行为就像数字一样:

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])

转换为numpy s

现在假设我们已将它们转换为字符串列表:

In [6]: x[0]
Out[6]: 496602723.82414573

In [7]: x[0] * 2
Out[7]: 993205447.64829147

现在他们是string的{​​{1}}。如果我们以数学方式对它们进行操作,它们的行为就像字符串,而不是数字:

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']

使用list

控制string数组的保存方式

最后,如果您正在使用numpy.savetxt,并希望控制数据输出到磁盘的方式,请考虑使用In [6]: x[0] * 2 Out[6]: '256619580.697790256619580.697790' 参数,而不是手动将数组元素转换为字符串。< / p>

例如,如果我们这样做:

numpy

默认情况下,如果数组的ascii表示更紧凑,则它将使用科学记数法:

savetxt

但是,我们可以使用fmt来控制它。请注意,它需要“旧式”np.savetxt('temp.txt', x) 格式字符串:

8.702970453168644905e+08
9.991634082796489000e+08
5.032002956810175180e+08
2.382398232565869987e+08
1.868727085152311921e+08

我们会得到:

fmt

答案 1 :(得分:3)

如果您只想在不使用科学记数法的情况下打印它们,可以 Scanner input = new Scanner(System.in); System.out.println( "Please enter a nine digit. number to check "); int number = input.nextInt(); String usernumber = ""; usernumber = Integer.toString(number); // Access each character in the string and create a. numeric value for // Them as a variable int d1 = Character.getNumericValue(usernumber.charAt(0)); int d2 = Character.getNumericValue(usernumber.charAt(1)); int d3 = Character.getNumericValue(usernumber.charAt(2)); int d4 = Character.getNumericValue(usernumber.charAt(3)); int d5 = Character.getNumericValue(usernumber.charAt(4)); int d6 = Character.getNumericValue(usernumber.charAt(5)); int d7 = Character.getNumericValue(usernumber.charAt(6)); int d8 = Character.getNumericValue(usernumber.charAt(7)); int d9 = Character.getNumericValue(usernumber.charAt(8)); // Initialize a variable for your check digit int CDvalue = 0; // Perform the instructed calculation (d1*1 + d2*2 + d3*3 + … + d9*9) % 11 == C boolean isbnvalue = (d1*1 + d2*2 + d3*3 + d4*4 + d5*5 + d6*6 + d7*7 + d8*8 + d9*9) % 11 == CDvalue; if( CDvalue == 0 ){ int CD = 0; System.out.println( "Your check digit is " + CD); } else if ( CDvalue == 10){ System.out.println( "Your check digit is X" ); } else { System.out.println( "Your check digit is " + CDvalue); } } }