Numpy 행렬을 Latex 용으로 출력
목표
보통 numpy ndarray를 인쇄하면
[[ 9.999e+00 -1.000e-03 -1.000e-03]
[-1.000e-03 9.999e+00 -1.000e-03]
[-1.000e-03 -1.000e-03 9.999e+00]]
처럼 된다.
이 ndarray를 latex로 컴파일할 수 있는 형태로 출력시키고 싶다.
즉, 이 ndarray를 주면,
\begin{pmatrix}
\ 9.999 & -0.001 & -0.001 \\
-0.001 & \ 9.999 & -0.001 \\
-0.001 & -0.001 & \ 9.999 \\
\end{pmatrix}
같은 출력을 하는 함수를 만든다. 이것이 있다면
수
\documentclass[12pt]{article}
\usepackage{amsmath}
\begin{document}
\begin{align*}
\begin{pmatrix}
\ 9.999 & -0.001 & -0.001 \\
-0.001 & \ 9.999 & -0.001 \\
-0.001 & -0.001 & \ 9.999 \\
\end{pmatrix}
\end{align*}
\end{document}
만드는 법
우선, 행렬의 행수와 열의 수는, numpy.array.shape로 tuple로서 취득할 수 있다.
tuple에 (행수, 열수)로서 들어 있기 때문에 이것을 각각 변수에 넣는다.
5. 데이터 구조 — Python 3.8.5 문서
import numpy as np
matrix = np.ones((3,3))
_, max_column = matrix.shape
이번에는 행수는 사용하지 않기 때문에, 사용하지 않는다는 의미를 담아_라고 하는 변수로서 썼다.
만든 함수
def str_2dmatrix_latex(matrix, indent=4, digit=3, env="pmatrix"):
r"""
Convert 2d matrix to str for latex.
*In your latex preset, you must add
amsmath
Parameters
----------
matrix : numpy.ndarray
2d matrix
indent : int
indent width
if indent is -1, indent become tab
digit : int
digit=2 0.11
digit=3 0.111
env : str
env is inserted ... in \begin{...}
and \end{...}
Return
------
str
"""
_, max_column = matrix.shape
if indent == -1:
str_indent = "\t"
else:
str_indent = " " * indent
list_str = []
list_str.append(r"\begin{" + f"{env}" + "}\n")
for row in matrix:
for j, elem in enumerate(row):
str_elem = f"{elem:.{digit}f}"
# format
if elem > 0:
str_elem = r"\ " + str_elem
# write matrix element
if j == 0:
list_str.append(str_indent + str_elem + " & ")
elif j == max_column - 1:
list_str.append(str_elem + r" \\" + "\n")
else:
list_str.append(str_elem + " & ")
list_str.append(r"\end{" + f"{env}" + "}\n")
return "".join(list_str)
def main():
one_mat = np.ones((3, 3))
"""
1 1 1
1 1 1
1 1 1
"""
id_mat = np.eye(3)
"""
1 0 0
0 1 0
0 0 1
"""
mat = 10 * id_mat - 0.001 * one_mat
print(str_2dmatrix_latex(mat))
if __name__ == "__main__":
main()
실행 결과
\begin{pmatrix}
\ 9.999 & -0.001 & -0.001 \\
-0.001 & \ 9.999 & -0.001 \\
-0.001 & -0.001 & \ 9.999 \\
\end{pmatrix}
Reference
이 문제에 관하여(Numpy 행렬을 Latex 용으로 출력), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/78910jqk/items/01c7acee23e7223029d3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
[[ 9.999e+00 -1.000e-03 -1.000e-03]
[-1.000e-03 9.999e+00 -1.000e-03]
[-1.000e-03 -1.000e-03 9.999e+00]]
\begin{pmatrix}
\ 9.999 & -0.001 & -0.001 \\
-0.001 & \ 9.999 & -0.001 \\
-0.001 & -0.001 & \ 9.999 \\
\end{pmatrix}
\documentclass[12pt]{article}
\usepackage{amsmath}
\begin{document}
\begin{align*}
\begin{pmatrix}
\ 9.999 & -0.001 & -0.001 \\
-0.001 & \ 9.999 & -0.001 \\
-0.001 & -0.001 & \ 9.999 \\
\end{pmatrix}
\end{align*}
\end{document}
우선, 행렬의 행수와 열의 수는, numpy.array.shape로 tuple로서 취득할 수 있다.
tuple에 (행수, 열수)로서 들어 있기 때문에 이것을 각각 변수에 넣는다.
5. 데이터 구조 — Python 3.8.5 문서
import numpy as np
matrix = np.ones((3,3))
_, max_column = matrix.shape
이번에는 행수는 사용하지 않기 때문에, 사용하지 않는다는 의미를 담아_라고 하는 변수로서 썼다.
만든 함수
def str_2dmatrix_latex(matrix, indent=4, digit=3, env="pmatrix"):
r"""
Convert 2d matrix to str for latex.
*In your latex preset, you must add
amsmath
Parameters
----------
matrix : numpy.ndarray
2d matrix
indent : int
indent width
if indent is -1, indent become tab
digit : int
digit=2 0.11
digit=3 0.111
env : str
env is inserted ... in \begin{...}
and \end{...}
Return
------
str
"""
_, max_column = matrix.shape
if indent == -1:
str_indent = "\t"
else:
str_indent = " " * indent
list_str = []
list_str.append(r"\begin{" + f"{env}" + "}\n")
for row in matrix:
for j, elem in enumerate(row):
str_elem = f"{elem:.{digit}f}"
# format
if elem > 0:
str_elem = r"\ " + str_elem
# write matrix element
if j == 0:
list_str.append(str_indent + str_elem + " & ")
elif j == max_column - 1:
list_str.append(str_elem + r" \\" + "\n")
else:
list_str.append(str_elem + " & ")
list_str.append(r"\end{" + f"{env}" + "}\n")
return "".join(list_str)
def main():
one_mat = np.ones((3, 3))
"""
1 1 1
1 1 1
1 1 1
"""
id_mat = np.eye(3)
"""
1 0 0
0 1 0
0 0 1
"""
mat = 10 * id_mat - 0.001 * one_mat
print(str_2dmatrix_latex(mat))
if __name__ == "__main__":
main()
실행 결과
\begin{pmatrix}
\ 9.999 & -0.001 & -0.001 \\
-0.001 & \ 9.999 & -0.001 \\
-0.001 & -0.001 & \ 9.999 \\
\end{pmatrix}
Reference
이 문제에 관하여(Numpy 행렬을 Latex 용으로 출력), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/78910jqk/items/01c7acee23e7223029d3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def str_2dmatrix_latex(matrix, indent=4, digit=3, env="pmatrix"):
r"""
Convert 2d matrix to str for latex.
*In your latex preset, you must add
amsmath
Parameters
----------
matrix : numpy.ndarray
2d matrix
indent : int
indent width
if indent is -1, indent become tab
digit : int
digit=2 0.11
digit=3 0.111
env : str
env is inserted ... in \begin{...}
and \end{...}
Return
------
str
"""
_, max_column = matrix.shape
if indent == -1:
str_indent = "\t"
else:
str_indent = " " * indent
list_str = []
list_str.append(r"\begin{" + f"{env}" + "}\n")
for row in matrix:
for j, elem in enumerate(row):
str_elem = f"{elem:.{digit}f}"
# format
if elem > 0:
str_elem = r"\ " + str_elem
# write matrix element
if j == 0:
list_str.append(str_indent + str_elem + " & ")
elif j == max_column - 1:
list_str.append(str_elem + r" \\" + "\n")
else:
list_str.append(str_elem + " & ")
list_str.append(r"\end{" + f"{env}" + "}\n")
return "".join(list_str)
def main():
one_mat = np.ones((3, 3))
"""
1 1 1
1 1 1
1 1 1
"""
id_mat = np.eye(3)
"""
1 0 0
0 1 0
0 0 1
"""
mat = 10 * id_mat - 0.001 * one_mat
print(str_2dmatrix_latex(mat))
if __name__ == "__main__":
main()
\begin{pmatrix}
\ 9.999 & -0.001 & -0.001 \\
-0.001 & \ 9.999 & -0.001 \\
-0.001 & -0.001 & \ 9.999 \\
\end{pmatrix}
Reference
이 문제에 관하여(Numpy 행렬을 Latex 용으로 출력), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/78910jqk/items/01c7acee23e7223029d3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)