LoginSignup
2
2

More than 5 years have passed since last update.

Python > work = [1 for x in geoStdev] はwork = [1] * len(geoStdev)でいいだろうか? | 処理時間の計測

Last updated at Posted at 2018-04-04
動作環境
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ともに同じ。

関連

処理時間の計測

(追記 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リストに対する処理の違いについては未確認。

2
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2