Как внедрить символьную форму матрицы из sympy в форматированную строку?

#jupyter-notebook #string-formatting #sympy

#jupyter-notebook #форматирование строки #sympy

Вопрос:

В записной книжке печать матрицы sympy не составляет труда

введите описание изображения здесь

Однако это не работает для форматированных строк:

введите описание изображения здесь

Что я могу сделать, чтобы сохранить символическое представление в форматированной строке?


Текстовый код:

 import sympy
sympy.init_printing()
C = sympy.Matrix([[2, 3], [4, 5]])
display (C)
display (f'{C} x {C} = {C*C}')
  

Ответ №1:

 In [1]: C = Matrix([[2,3],[4,5]])

In [2]: C
Out[2]: 
⎡2  3⎤
⎢    ⎥
⎣4  5⎦
  

При f'{}' форматировании используется repr либо str формат C объекта, либо:

 In [3]: repr(C)
Out[3]: 'Matrix([n[2, 3],n[4, 5]])'

In [4]: str(C)
Out[4]: 'Matrix([[2, 3], [4, 5]])'
  

Это операция форматирования python, которая не обращает внимания на sympy's методы отображения.

https://docs.sympy.org/latest/tutorial/printing.html sympy печать документов, хотя я не сразу вижу идеи, которые вам помогут.

Чтобы отобразить все это как выражение sympy, все это должно отображаться как единое целое; мы не можем использовать каждую часть отдельно:

 In [9]: display(C, 'x', C, '=', C*C)
⎡2  3⎤
⎢    ⎥
⎣4  5⎦
'x'
⎡2  3⎤
⎢    ⎥
⎣4  5⎦
'='
⎡16  21⎤
⎢      ⎥
⎣28  37⎦
  

===

Согласно комментарию:

 In [11]: Eq(MatMul(C, C), C*C)
Out[11]: 
⎡2  3⎤ ⎡2  3⎤   ⎡16  21⎤
⎢    ⎥⋅⎢    ⎥ = ⎢      ⎥
⎣4  5⎦ ⎣4  5⎦   ⎣28  37⎦
  

Комментарии:

1. Это очень плохо, я ожидал, что SymPy предоставит замену для t'string' управления своими собственными особенностями.

2. f'string' Функция в python довольно новая, поэтому я бы не ожидал, что сторонние пакеты будут ее эмулировать. docs.sympy.org/latest/modules/printing.html это более подробный печатный документ.

3. Спасибо за ссылку, в которой рассказывается о многих аспектах печати в одном месте. Учитывая прошлые попытки и их количество, а также сложность, создаваемую math и latex, я не надеюсь, что ее можно быстро решить.

4. Вы можете просто отобразить Eq(MatMul(C, C), C*C)