Help us understand the problem. What is going on with this article?

Python > makeMarkDownTable_Qxxx_180224.py > v0.1 > 計算結果の数値から計算をして、Markdownテーブル表記で出力する

More than 1 year has passed since last update.
動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 16.04 LTS desktop amd64
TensorFlow v1.2.1
cuDNN v5.1 for Linux
CUDA v8.0
Python 3.5.2
IPython 6.0.0 -- An enhanced Interactive Python.
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
scipy v0.19.1
geopandas v0.3.0
MATLAB R2017b (Home Edition)
ADDA v.1.3b6

処理概要

以下のような計算結果がある。ある値との誤差を計算したうえでMarkdownテーブル表記で出力したい。

30 4.94326 -11.7412598164 blue
60 4.536754 -15.8224580835 blue
100 4.58954 -20.7454559716 blue
300 4.444392 -22.6421296771 blue
500 4.349006 -23.5499560129 blue
1000 4.377727 -23.6671679161 blue
1500 4.382704 -23.5305418755 blue
2000 4.390335 -23.5956253908 blue
12 2.329375 -32.4526965388 red
42 5.006174 -20.9038079779 red
162 4.328343 -22.0221687607 red
642 4.382297 -23.5953656267 red
2562 4.383335 -23.5452229866 red
31 4.104669 -27.128399391 green
61 4.270889 -26.230112747 green
101 4.351807 -24.5505602615 green
301 4.392717 -23.5750447844 green
501 4.396591 -23.4863556788 green
1001 4.398315 -23.4478203585 green
1501 4.398605 -23.4405453547 green
2001 4.398712 -23.4379518368 green

code v0.1

makeMarkDownTable_Qxxx_180224.py
'''
v0.1 Feb. 24, 2018
  - print in the markdown format
  - add calc_error()
  - add ROW_START, ROW_STOP
  - add HN_pos[], IN_pos[], FN_pos[]
  - add Noris[], Qexts[], Qabss[]
  - add [STR_RES]
'''

# on Python 3.5.2
# conding rule: PEP8

# Output from [showNoriQxxx_180217.ipynb] v0.1
#   Nori, Qext, Qabs, name_color
#   ROW 0-7: Hammersley Nodes
#   ROW 8-12: Icosahedral Nodes
#   ROW 13-20: Fibonacci Nodes
STR_RES = '''30 4.94326 -11.7412598164 blue
60 4.536754 -15.8224580835 blue
100 4.58954 -20.7454559716 blue
300 4.444392 -22.6421296771 blue
500 4.349006 -23.5499560129 blue
1000 4.377727 -23.6671679161 blue
1500 4.382704 -23.5305418755 blue
2000 4.390335 -23.5956253908 blue
12 2.329375 -32.4526965388 red
42 5.006174 -20.9038079779 red
162 4.328343 -22.0221687607 red
642 4.382297 -23.5953656267 red
2562 4.383335 -23.5452229866 red
31 4.104669 -27.128399391 green
61 4.270889 -26.230112747 green
101 4.351807 -24.5505602615 green
301 4.392717 -23.5750447844 green
501 4.396591 -23.4863556788 green
1001 4.398315 -23.4478203585 green
1501 4.398605 -23.4405453547 green
2001 4.398712 -23.4379518368 green
'''

wrk = STR_RES.replace('\n', ' ').split(' ')
Noris = [wrk[i] for i in range(0, len(wrk), 4)]
Qexts = [float(wrk[i]) for i in range(1, len(wrk), 4)]
Qabss = [float(wrk[i]) for i in range(2, len(wrk), 4)]

# --- Configurations ---
# start, stop for different point sets
HN_pos = [0, 7]
IN_pos = [8, 12]
FN_pos = [13, 20]
# change following for each run (e.g. HN_...)
ROW_START = HN_pos[0]
ROW_STOP = HN_pos[1] + 1
# set answer to compare
ANS = Qexts[IN_pos[1]]
# set array to be compared (Qexts, Qabss)
CLM_A = Noris[ROW_START:ROW_STOP]
CLM_B = Qexts[ROW_START:ROW_STOP]
# ---


def calc_error(elemA, elemB):
    return abs(elemA - elemB) / abs(elemB) * 100

MD_TITLE = '''| 1 | 2 | 3 |
|:-:|:-:|:-:|'''

print(MD_TITLE)

for elemA, elemB in zip(CLM_A, CLM_B):
    err = calc_error(elemB, ANS)
    print("| %s | %s | %5.2f |" % (elemA, elemB, err))

実行例

$ python3 makeMarkDownTable_Qxxx_180224.py 
| 1 | 2 | 3 |
|:-:|:-:|:-:|
| 30 | 4.94326 | 12.77 |
| 60 | 4.536754 |  3.50 |
| 100 | 4.58954 |  4.70 |
| 300 | 4.444392 |  1.39 |
| 500 | 4.349006 |  0.78 |
| 1000 | 4.377727 |  0.13 |
| 1500 | 4.382704 |  0.01 |
| 2000 | 4.390335 |  0.16 |

Markdownとして見ると以下となる。

1 2 3
30 4.94326 12.77
60 4.536754 3.50
100 4.58954 4.70
300 4.444392 1.39
500 4.349006 0.78
1000 4.377727 0.13
1500 4.382704 0.01
2000 4.390335 0.16

あとは項目表記などを編集すれば出来上がり。

設定項目

用途に合わせてConfigurationsの項目を変更して使う。

HN_pos[1]の1はマジックナンバーだが、すぐ上を見れば分かるので、これはこのままとする。

派生コード

makeMarkDownTable_S11Pol_180224.py
'''
v0.2 Feb. 24, 2018
  - alter comment for [STR_RES]
  - rename [Qabss] to [Pols]
  - rename [Qexts] to [S11s]
  - branched from [makeMarkDownTable_Qxxx_180224.py]
v0.1 Feb. 24, 2018
  - print in the markdown format
  - add calc_error()
  - add ROW_START, ROW_STOP
  - add HN_pos[], IN_pos[], FN_pos[]
  - add Noris[], Qexts[], Qabss[]
  - add [STR_RES]
'''

# on Python 3.5.2
# conding rule: PEP8

# Output from [showNoriMueller_180203.ipynb] v0.1
#   Nori, S11, Pol, name_color
#   ROW 0-7: Hammersley Nodes
#   ROW 8-12: Icosahedral Nodes
#   ROW 13-20: Fibonacci Nodes
STR_RES = '''30 4.94326 -11.7412598164 blue
60 4.536754 -15.8224580835 blue
100 4.58954 -20.7454559716 blue
300 4.444392 -22.6421296771 blue
500 4.349006 -23.5499560129 blue
1000 4.377727 -23.6671679161 blue
1500 4.382704 -23.5305418755 blue
2000 4.390335 -23.5956253908 blue
12 2.329375 -32.4526965388 red
42 5.006174 -20.9038079779 red
162 4.328343 -22.0221687607 red
642 4.382297 -23.5953656267 red
2562 4.383335 -23.5452229866 red
31 4.104669 -27.128399391 green
61 4.270889 -26.230112747 green
101 4.351807 -24.5505602615 green
301 4.392717 -23.5750447844 green
501 4.396591 -23.4863556788 green
1001 4.398315 -23.4478203585 green
1501 4.398605 -23.4405453547 green
2001 4.398712 -23.4379518368 green
'''

wrk = STR_RES.replace('\n', ' ').split(' ')
Noris = [wrk[i] for i in range(0, len(wrk), 4)]
S11s = [float(wrk[i]) for i in range(1, len(wrk), 4)]
Pols = [float(wrk[i]) for i in range(2, len(wrk), 4)]

# --- Configurations ---
# start, stop for different point sets
HN_pos = [0, 7]
IN_pos = [8, 12]
FN_pos = [13, 20]
# change following for each run (e.g. HN_...)
ROW_START = HN_pos[0]
ROW_STOP = HN_pos[1] + 1
# set answer to compare
ANS = Pols[IN_pos[1]]
# set array to be compared (S11s, Pols)
CLM_A = Noris[ROW_START:ROW_STOP]
CLM_B = Pols[ROW_START:ROW_STOP]
# ---


def calc_error(elemA, elemB):
    return abs(elemA - elemB) / abs(elemB) * 100

MD_TITLE = '''| 1 | 2 | 3 |
|:-:|:-:|:-:|'''

print(MD_TITLE)

for elemA, elemB in zip(CLM_A, CLM_B):
    err = calc_error(elemB, ANS)
    print("| %s | %s | %5.4f |" % (elemA, elemB, err))

7of9
セブンオブナインです。Unimatrix 01の第三付属物 9の7という識別番号です。Star trek Voyagerの好きなキャラクターです。まとめ記事は後日タイトルから内容がわからなくなるため、title検索で見つかるよう個々の記事にしてます。いわゆるBorg集合体の有名なセリフから「お前たち(の知識)を吸収する。抵抗は無意味だ」。Thanks in advance.
qiitadon
Qiitadon(β)から生まれた Qiita ユーザー・コミュニティです。
https://qiitadon.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away