我有一个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')
将数字从科学格式转换为十进制格式但是如何使用它来转换我的数组元素?
答案 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);
}
}
}
。