動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 16.04.4 LTS desktop amd64
TensorFlow v1.7.0
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
gnustep-gui-runtime v0.24.0-3.1
gamma = [1 for x in geoStdDev]
gammaにgeoStdDevの要素数分1を代入しているようだ。
リスト内表表記である必要性がわからない。
set1_180405.py
# on Python 3.5.2
geoStdev = [0.3, 0.1, 0.4, 0.1, 0.5]
# case 1
work = [1 for x in geoStdev]
print(work)
print([id(x) for x in work])
# case 2
work = [1] * len(geoStdev)
print(work)
print([id(x) for x in work])
$ python3 set1_180405.py
[1, 1, 1, 1, 1]
[10919424, 10919424, 10919424, 10919424, 10919424]
[1, 1, 1, 1, 1]
[10919424, 10919424, 10919424, 10919424, 10919424]
identityについてはcase 1とcase 2ともに同じ。
関連
- @shiracamus さんのコメント @ Python3 + Numpy > 5列の要素を持つ二次元リストから1列だけ取出す > PyMieScatt実装(内包表記) | np.array(lists)[:, 2:2+1].flatten() > よりシンプルな書き方
- python > array > 個数を決めて初期化する > mylist = [idx for idx in range(10)] / mylist = [0 for idx in range(10)] >> mylist = [0] * 10
処理時間の計測
(追記 2018/04/07)
@hidekuro さんのコメントをもとに、Jupyter Notebookで速度を測定してみました。
performance_listComprehension_180407.ipynb
%%timeit
# on Jupyter Notebook (IPython 6.0.0 -- An enhanced Interactive Python. Type '?' for help.)
# Python 3.5.2
geoStdev = [0.3, 0.1, 0.4, 0.1, 0.5]
# case 1
work = [1 for x in geoStdev]
結果: 311 ns ± 6.29 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
performance_listComprehension_180407.ipynb
%%timeit
# on Jupyter Notebook (IPython 6.0.0 -- An enhanced Interactive Python. Type '?' for help.)
# Python 3.5.2
geoStdev = [0.3, 0.1, 0.4, 0.1, 0.5]
# case 2
work = [1] * len(geoStdev)
結果: 203 ns ± 1.21 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
後者の方が速いようではあるが、要素数を変えた時には異なる結果になるかもしれない。
performance_listComprehension_180407.ipynb
%%timeit
import numpy as np
# on Jupyter Notebook (IPython 6.0.0 -- An enhanced Interactive Python. Type '?' for help.)
# Python 3.5.2
geoStdev = np.random.rand(10000)
# case 1
work = [1 for x in geoStdev]
結果: 398 µs ± 21.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
performance_listComprehension_180407.ipynb
%%timeit
import numpy as np
# on Jupyter Notebook (IPython 6.0.0 -- An enhanced Interactive Python. Type '?' for help.)
# Python 3.5.2
geoStdev = np.random.rand(10000)
# case 2
work = [1] * len(geoStdev)
結果: 83.5 µs ± 297 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
numpy ndarrayに対する処理と、Pythonリストに対する処理の違いについては未確認。