動作環境
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
擬似コード
Num = CEIL((Num - 1) / 2)
XS = [0] * (2 * Num + 1)
偶数のNumを元に奇数のサイズのXSを定義したいようだ。
CEIL()を使う理由が分からなかった。
コードの下の方で以下があった。
for i = -Num to Num # Numまでを含めたループ
...
このループのために冒頭のNumをCEIL()で取得しているようだ。
別案
Ceilを使わない方法をPythonで書いてみる。
Nloopの計算は二通り考えた。Pythonであれば後者が簡潔に記載できる。
(後者: floor division)
ceil()がある言語ではceil()を使う方がいいかもしれない。ただし、最初にceil()を使うのではなく、ループ変数計算用にceil()を使う方が読みすいと思う。
test_odd2even_loop_180204.py
# tested on Python 3.5.2
Neven = 8
Nodd = Neven - 1
# 1. for non-Pythonic language
Nloop = (int)((Nodd - 1) / 2) + 1
# 2. for Python
Nloop = Nodd // 2 + 1
for idx in range(-Nloop, Nloop+1): # +1: range() does not include end point
print(idx)
run
$ python3 test_odd2even_loop_180204.py
-4
-3
-2
-1
0
1
2
3
4
こういうループはSpherical Harmonicsのorder, degreeの計算でよく目にする。
code修正
最初にCEIL()で処理しているので、下記が正解だろうか。
test_odd2even_loop_180204.py
# tested on Python 3.5.2
Neven = 8
Nodd = Neven + 1
# 1. for non-Pythonic language
Nloop = (int)((Nodd - 1) / 2)
# 2. for Python
Nloop = Nodd // 2
for idx in range(-Nloop, Nloop+1): # +1: range() does not include end point
print(idx)
元の擬似コード実装では、最初にCEIL()を使うことで引数が奇数でも偶数でも対応する、という意図がある気がしてきた。