IPython`display`to string
我正在尝试使用IPython`display`to string,python,ipython,markdown,Python,Ipython,Markdown,我正在尝试使用IPython.display模块将对象转换为标记。但是,似乎没有一种好方法可以将此降价导出为字符串 行为: >>从IPython.display导入* >>>从numpy进口* >>>显示标记(眼睛(3)) [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] 通缉行为: >>> display_markdown_string(eye(3)) "$$\left( ... \right)$$" 有没有一个好的方法来实现这一点?在我看来,这个功能
IPython.display
模块将对象转换为标记。但是,似乎没有一种好方法可以将此降价导出为字符串
行为:
>>从IPython.display导入*
>>>从numpy进口*
>>>显示标记(眼睛(3))
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
通缉行为:
>>> display_markdown_string(eye(3))
"$$\left( ... \right)$$"
有没有一个好的方法来实现这一点?在我看来,这个功能必须在IPython中的某个地方出现,因为它可以在笔记本中完成。现在我们正在为原始阵列创建一个视图。也许你可以用这种方法反转你的数组,它是
eye(x)
from numpy import *
print((eye(3))[::-1])
祝你好运。你误解了
display\u markdown()
的作用。它不是转换表示格式的函数。IPython不使用Markdown来显示数组,在这种特定情况下,它只输出纯文本
IPython显示系统希望对象本身提供格式化输出,而标记只是支持的不同格式之一。因为对象可以支持多种格式,所以有时需要显式选择一种特定格式display\u markdown()
用于选择标记表示法并忽略其他标记表示法。但如果一个对象没有特定的标记表示,则使用其标准的repr()
字符串作为回退。请参阅集成文档的第页
Numpy数组没有标记表示法,因此display\u markdown()
没有可处理的内容。您看到的打印内容只是由repr(eye(3))
生成的字符串。因此,您可以只使用repr(eye(3))
,并在标记中使用它,将其包装在反标记中:
A = np.eye(3)
markdown_repr = f"```\n{A!r}\n```"
!r
语法告诉Python获取repr()的输出。上面的命令生成字符串:
"```\narray([[1., 0., 0.],\n [0., 1., 0.],\n [0., 0., 1.]])\n```
如果您想在LaTeX中表示数组,那么有一些项目确实可以生成您可以使用的numpy数组表示;如果将它们的结果包装在$$
行中,则可以将它们作为标记输出,因为Jupyter支持嵌入的Mathjax表达式(LaTeX的子集)
例如,使用:
产生
$$
\开始{bmatrix}
1.00 & 0.00 & 0.00\\
0.00 & 1.00 & 0.00\\
0.00 & 0.00 & 1.00
\结束{bmatrix}
$$
您不必使用库(您可以编写自己的文本操作代码来执行类似的操作),但您不能使用IPython来执行此操作。
当然,一旦有了这样一个函数,您不仅可以直接使用它,还可以教IPython将其用于任何numpy数组。您可以使用IPython将其注册为text/markdown
的格式化程序,作为:
因为我使用的库输出LaTeX,所以您可以直接使用to_ltx()
(使用print\u out=False
)来生成LaTeX输出,这也会在您回显数组时产生Mathjax输出:
latex_formatter = get_ipython().display_formatter.formatters["text/latex"]
latex_formatter.for_type(np.ndarray, lambda m: to_ltx(m, print_out=False))
无论哪种方式,现在您都将看到阵列的MathJax呈现:
现在,如果您想访问对象提供给IPython的不同格式,那么您需要使用;这将为您提供两个字典,第一个是以各种表示mime类型作为键的字典。如果对象有降价转换,则可以在“text/markdown”
键下找到:
from IPython.core.formatters import format_display_data
formatted, metadata = format_display_data(A)
formatted["text/markdown"]
因为我已经为numpy数组注册了一个markdown格式化程序,上面为我们生成了到_markdown()
的输出:
'$$\n\\begin{bmatrix}\n 1.00 & 0.00 & 0.00\\\\\n 0.00 & 1.00 & 0.00\\\\\n 0.00 & 0.00 & 1.00\n\\end{bmatrix}\n$$'
但是如果没有额外的富显示注册,您只会得到一个“text/plain”
条目。这还不能回答问题吗?我没有问如何反转数组,而是问如何将其转换为标记…@Synthetica,请确认我对问题的理解:您希望从display\u Markdown
返回标记对象的字符串表示,并且此字符串对象也必须包含Latex?请你具体说明你想要什么?对于Pandas dataframes,您不希望Latex表采用字符串表示,但这改变了原始要求?@amanb正确,我想要Markdown对象的字符串表示。此表示不需要包含标记,但我怀疑它经常会包含。对于display\u markdown(eye(3))
,我没有得到任何东西。我必须使用display\u markdown(str(eye(3)),raw=True)
,以获得markdown中的内联数组:[[1.0.0.][0.1.0.][0.0.1.]
@Synthetica:但是没有markdown对象。甚至没有降价<如果没有可用于输入的标记版本,则代码>显示标记()
不会输出标记。为您的显示器生成的只是纯文本。
from IPython.core.formatters import format_display_data
formatted, metadata = format_display_data(A)
formatted["text/markdown"]
'$$\n\\begin{bmatrix}\n 1.00 & 0.00 & 0.00\\\\\n 0.00 & 1.00 & 0.00\\\\\n 0.00 & 0.00 & 1.00\n\\end{bmatrix}\n$$'