Numpy:可能更好的格式化?

2 投票
4 回答
3889 浏览
提问于 2025-04-18 01:21

有没有办法让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来输出结果。

撰写回答