rub*_*nvb 5 python numpy matplotlib string-formatting
我有一系列数字:
from numpy import r_
r_[10**(-9), 10**(-3), 3*10**(-3), 6*10**(-3), 9*10**(-3), 1.5*10**(-2)]
Run Code Online (Sandbox Code Playgroud)
我希望它们以一种形式显示在情节的传奇中:
a 10^(b)
Run Code Online (Sandbox Code Playgroud)
(含^意义上标)
以便例如第三个数字变为3 10^(-3).
我知道我必须使用Python的字符串格式化操作符%,但我没有看到这样做的方法.有人可以告诉我如何(或告诉我另一种方式)?
如果您确定小数点后面不需要超过固定数量的位数,那么:
>>> from numpy import r_
>>> a = r_[10**(-9), 10**(-3), 3*10**(-3), 6*10**(-3), 9*10**(-3), 1.5*10**(-2)]
>>> for x in a: print "%.1e"%x
...
1.0e-09
1.0e-03
3.0e-03
6.0e-03
9.0e-03
1.5e-02
Run Code Online (Sandbox Code Playgroud)
这里的问题是你要%.0e用作格式,最后一个数字将被打印为1e-2
编辑:既然你正在使用matplotlib,那么它是一个不同的故事:你可以使用TeX渲染引擎.一个快速而肮脏的例子:
fig = plt.figure()
ax = fig.add_subplot(111)
x = 1.5*10**(-2)
l = ("%.0e"%x).split("e")
x_str = r"$ %s \times 10^{%s}$" % (l[0], l[1] )
ax.set_title(x_str)
plt.show()
Run Code Online (Sandbox Code Playgroud)
新的.format字符串格式确实会更清洁.
EDIT2:仅仅为了完整性和未来的参考,这是我对评论中OP的看法:
x = 1.5*10**(-2)
l = ("%.0e"%x).split("e")
x_str = r"$%s \times 10^{%s}$" % ( l[0], str(int(l[1])) )
Run Code Online (Sandbox Code Playgroud)
在这里我转换为int并返回以避免前导零:-02- > -2等.