Numpy: возможно лучшее форматирование?

Есть ли способ получить лучший формат для матриц в Numpy, аналогичный, например, результатам, полученным с помощью show() в Sage или init_printing() в Sympy?

Я изучаю книгу Крейга Финча о Sage, и в главе о линейной алгебре очевидна разница в качестве и ясности между выводом Sage и Numpy. Есть ли способ улучшить качество вывода Numpy, в конечном итоге непосредственно в ноутбуке IPython?

Просто поясню мою просьбу: я привык к ноутбукам Sage, но хотел бы изучить новые возможности блокнотов Ipython. В частности, я хотел бы подготовить несколько блокнотов о линейной алгебре и Numpy. Но простой текстовый вывод Numpy не особенно хорош или ясен (http://nbviewer.ipython.org/github/jrjohansson/scientific-python-lectures/blob/master/Lecture-2-Numpy.ipynb), я бы предпочел какой-нибудь набранный стиль, в частности для матриц (скобки, круглые скобки, вертикальные черточки для определителей и так далее).


person BFir    schedule 04.04.2014    source источник
comment
возможный дубликат NumPy: красивая печать табличных данных   -  person Ffisegydd    schedule 04.04.2014
comment
Для создания произвольные строки из массивов numpy (используя unicode и любой хак, который вы можете придумать). Но я понятия не имею, какой результат производит Sage, поэтому я не знаю, о чем вы говорите. Также я считаю, что в блокноте IPython вы можете использовать средство форматирования LaTeX для массивов.   -  person Bakuriu    schedule 04.04.2014
comment
Скажите, пожалуйста, в чем проблема с форматированием по умолчанию.   -  person jrennie    schedule 04.04.2014


Ответы (4)


Вы можете преобразовать его в матрицу SymPy и использовать ее вывод init_printing.

person asmeurer    schedule 05.04.2014
comment
Это может быть интересно. Есть ли прямая команда для преобразования матриц Numpy в Sympy? У вас есть простые примеры? - person BFir; 05.04.2014
comment
Если массив отформатирован как [[1, 2], [3, 4]], где [1, 2] и [3, 4] — это строки матрицы, то вы можете просто использовать Matrix(array). - person asmeurer; 05.04.2014
comment
Обратите внимание, что вы захотите выполнять свои фактические вычисления с помощью numpy. Используйте SymPy только для печати. - person asmeurer; 05.04.2014
comment
Отлично, большое спасибо, метод хорошо работает в блокноте IPython. Теперь мне нужно немного изучить возможности форматирования Sympy, потому что на вашем примере я получаю красивую набранную матрицу с квадратными скобками, но числа в Sympy приобретают десятичную точку (1->1.0 и так далее). Ты знаешь почему? - person BFir; 06.04.2014

Я не знаком с этими форматами, но, возможно, вы могли бы взглянуть на 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
person atomh33ls    schedule 04.04.2014


Для html ipython-ноутбуков есть ipy_table, который вместо этого позволяет отображать двумерные массивы в таблице HTML. их строкового формата по умолчанию.

person keturn    schedule 04.04.2014
comment
Спасибо, я не знал ipy_table. Кажется, это хорошо для форматирования таблиц, но я бы хотел, чтобы некоторые параметры были специфичны для матриц. - person BFir; 05.04.2014