【问题标题】:Numpy: possible better formatting?Numpy:可能更好的格式?
【发布时间】:2014-04-04 14:14:02
【问题描述】:

有没有办法在 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),我更喜欢一些排版样式,特别是对于矩阵(括号、括号、行列式的竖线等)。

【问题讨论】:

  • 您可以使用 numpy.set_string_function 从 numpy 数组中生成任意字符串(使用 unicode 和您能想到的任何字符串破解)。但是我不知道 Sage 产生了什么输出,所以我不知道你在说什么。此外,我相信在 IPython Notebook 中,您可以对数组使用 LaTeX 格式化程序。
  • 请说出您的默认格式有什么问题。

标签: python numpy formatting ipython sympy


【解决方案1】:

您可以将其转换为 SymPy 矩阵并使用 init_printing 的输出。

【讨论】:

  • 这可能很有趣。是否有将 Numpy 矩阵转换为 Sympy 的直接命令?你有一些简单的例子吗?
  • 如果数组的格式像[[1, 2], [3, 4]],其中[1, 2][3, 4]是矩阵的行,那么你可以使用Matrix(array)
  • 请注意,您需要使用 numpy 进行实际计算。仅使用 SymPy 进行打印。
  • 完美,非常感谢,该方法在 IPython notebook 中运行良好。现在我必须研究一下 Sympy 的格式化选项,因为在您的示例中,我获得了一个带有方括号的漂亮排版矩阵,但是 Sympy 中的数字获得了一个小数点(1-> 1.0 等等)。你知道为什么吗?
【解决方案2】:

我不熟悉这些格式,但也许您可以查看 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

【讨论】:

    【解决方案3】:

    也许你需要的是numpy.set_printoptions(),看看in the documentation。一个关于如何改变打印输出精度的例子:

    np.set_printoptions(precision=2)
    

    【讨论】:

    • 您好阅读了官方文档,但没有找到直接使用 Numpy 选项提高输出质量的方法。
    【解决方案4】:

    对于 html ipython-notebooks,有 ipy_table,它允许您在 HTML 表格中呈现二维数组,而不是它们的默认字符串格式。

    【讨论】:

    • 谢谢,我不知道 ipy_table。格式化表格似乎很好,但我想要一些特定于矩阵的选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    相关资源
    最近更新 更多