Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IPython`display`to string_Python_Ipython_Markdown - Fatal编程技术网

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$$'