Numpy:可能更好的格式化?
有没有办法让Numpy中的矩阵显示得更好看一点?比如像Sage中的show()或者Sympy中的init_printing()那样?
我正在看Craig Finch写的Sage书,里面有一章讲线性代数,能明显感觉到Sage的输出效果比Numpy要好很多。有没有什么方法可以提升Numpy的输出质量,最好是在IPython笔记本里直接实现?
为了更清楚地说明我的需求:我习惯使用Sage笔记本,但想尝试一下IPython笔记本的新功能。特别是我想准备一些关于线性代数和Numpy的笔记本。但是Numpy输出的简单文本格式看起来并不太好,也不够清晰(http://nbviewer.ipython.org/github/jrjohansson/scientific-python-lectures/blob/master/Lecture-2-Numpy.ipynb),我更希望能有一些排版风格,特别是对于矩阵(比如括号、圆括号、竖线表示行列式等等)。
4 个回答
0
对于html格式的ipython笔记本,有一个叫做 ipy_table 的工具。这个工具可以把二维数组显示成一个HTML表格,而不是默认的字符串格式。
1
也许你需要用到 numpy.set_printoptions()
这个功能,具体可以看看 官方文档。这里有一个例子,展示了如何改变输出结果的小数位数:
np.set_printoptions(precision=2)
3
我对那些格式不太熟悉,不过你可以看看pandas
,也许可以用一个DataFrame
。这个东西默认会给你编号的行和列:
import numpy as np
a = np.random.random((5,5))
print a
[[ 0.78022594 0.37348569 0.25796595 0.27718512 0.72702331]
[ 0.35732242 0.56154946 0.66928828 0.30218237 0.73351843]
[ 0.94946754 0.94317356 0.94021486 0.60110254 0.56683929]
[ 0.61902204 0.19068132 0.53713708 0.03889093 0.65818047]
[ 0.32843129 0.74062189 0.59666774 0.46876727 0.96919562]]
import pandas as pd
b = pd.DataFrame(a)
print b
0 1 2 3 4
0 0.780226 0.373486 0.257966 0.277185 0.727023
1 0.357322 0.561549 0.669288 0.302182 0.733518
2 0.949468 0.943174 0.940215 0.601103 0.566839
3 0.619022 0.190681 0.537137 0.038891 0.658180
4 0.328431 0.740622 0.596668 0.468767 0.969196
5
你可以把它转换成一个SymPy矩阵,然后使用init_printing
来输出结果。