Редактирование результатов в таблицу - PullRequest
0 голосов
/ 23 сентября 2018

В следующем коде я пытаюсь отредактировать код, который выводит результаты в более презентабельной форме, как я показал ниже.Нужна помощь с этим.

import numpy as np
import math
for p in range(10): 
    x=10.0**-p; 
    result = np.float64((1-np.cos(x))/x)
    print (p)
    print (result)
    Test = np.float64(2*np.sin(x/2)**2/x)
    print (p)
    print(Test)

Дает следующие результаты:

0
0.459697694132
0
0.459697694132
1
0.0499583472197
1
0.0499583472197
2
0.00499995833347
2
0.00499995833347
3
0.000499999958326
3
0.000499999958333
4
4.99999996961e-05
4
4.99999999583e-05
5
5.0000004137e-06
5
4.99999999996e-06
6
5.00044450291e-07
6
5e-07
7
4.99600361081e-08
7
5e-08
8
0.0
8
5e-09
9
0.0
9
5e-10

Однако я пытаюсь вывести результаты в более презентабельной форме.Как я могу отредактировать мой код так, чтобы он выводил результаты вроде:

p     Result             Test

0     0.459697694132     0.459697694132
1     0.0499583472197    0.0499583472197
2     0.00499995833347   0.00499995833347
3     0.000499999958326  0.000499999958333
4     4.99999996961e-05  4.99999999583e-05
5     5.0000004137e-06   4.99999999996e-06
6     5.00044450291e-07  5e-07
7     4.99600361081e-08  5e-08
8     0.0                5e-09
9     1e-09  0.0         5e-10

Ответы [ 3 ]

0 голосов
/ 23 сентября 2018

Можно использовать панд DataFrame

vals = []
for p in range(10): 
    x=10.0**-p; 
    result = np.float64((1-np.cos(x))/x)
    test = np.float64(2*np.sin(x/2)**2/x)
    vals.append((p, result, test))

Затем

import pandas as pd

df = pd.DataFrame(vals, columns=['p', 'result', 'test'])


    p   result      test
0   0   0.45969769  0.45969769
1   1   0.04995835  0.04995835
2   2   0.00499996  0.00499996
3   3   0.00050000  0.00050000
4   4   0.00005000  0.00005000
5   5   0.00000500  0.00000500
6   6   0.00000050  0.00000050
7   7   0.00000005  0.00000005
8   8   0.00000000  0.00000001
9   9   0.00000000  0.00000000

Вы также можете использовать np.vectorize для удобства:

def func(p):
    x=10.0**-p;
    result = np.float64((1-np.cos(x))/x)
    test = np.float64(2*np.sin(x/2)**2/x)
    return p, result, test


vals = np.vectorize(func)(np.arange(10))

pd.DataFrame(dict(zip(['p', 'result', 'test'], vals)))
0 голосов
/ 24 сентября 2018

Использование format, но трудно определить максимальную длину результата без добавления нового цикла. Поэтому я могу сделать следующее:

import numpy as np
import math
print("{:<3}".format("p"),"{:<23}".format("result"),"Test")
for p in range(10): 
    x=10.0**-p; 
    result = np.float64((1-np.cos(x))/x)
    Test = np.float64(2*np.sin(x/2)**2/x)
    print("{:<3}".format(p),"{:<23}".format(result),Test) 

Вывод:

p   result                  Test
0   0.45969769413186023     0.459697694132
1   0.049958347219741794    0.0499583472197
2   0.004999958333473664    0.00499995833347
3   0.0004999999583255033   0.000499999958333
4   4.999999969612645e-05   4.99999999583e-05
5   5.000000413701855e-06   4.99999999996e-06
6   5.000444502911705e-07   5e-07
7   4.9960036108132044e-08  5e-08
8   0.0                     5e-09
9   0.0                     5e-10
[Finished in 0.3s]
0 голосов
/ 23 сентября 2018

Ваш код будет выглядеть следующим образом:

print("p    Result        Test")
for p in range(10): 
    x=10.0**-p; 
    result = np.float64((1-np.cos(x))/x)
    Test = np.float64(2*np.sin(x/2)**2/x)
    print("{}    {}        {}".format(p, result, Test))

Вы можете использовать f-строки (если вы используете Python 3.6):

print("p    Result        Test")
for p in range(10): 
    x=10.0**-p; 
    result = np.float64((1-np.cos(x))/x)
    Test = np.float64(2*np.sin(x/2)**2/x)
    print(f"{p}    {result}        {Test}")
...