python 如何让 timeit 识别定义的输入
python How to make timeit recognize defined inputs
我定义了一个 df,我已成功 运行 操作。我想计算迭代 for
循环和矢量化操作之间的区别。我已经阅读了有关如何使用 timeit 的各种示例,但是当我尝试使用它们时,出现以下错误。我做错了什么?
进口:
import h5py
import pandas as pd
import timeit
这个循环有效:
for u in df['owner'].unique():
print(u, ': ', len(df[(df['owner'] == u)]), sep = '')
但是当我尝试这样计时时......:[=18=]
s = """\
for u in df['owner'].unique():
print(u, ': ', len(df[(df['owner'] == u)]), sep = '')"""
time_iter_1_1_1 = timeit.timeit(s)
...它会产生此错误:
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-34-7526e96d565c> in <module>()
3 # print(u, ': ', len(df[(df['owner'] == u)]), sep = '')""")
4
----> 5 time_iter_1_1_1 = timeit.timeit(s)
~\Anaconda2\envs\py36\lib\timeit.py in timeit(stmt, setup, timer, number, globals)
231 number=default_number, globals=None):
232 """Convenience function to create Timer object and call timeit method."""
--> 233 return Timer(stmt, setup, timer, globals).timeit(number)
234
235 def repeat(stmt="pass", setup="pass", timer=default_timer,
~\Anaconda2\envs\py36\lib\timeit.py in timeit(self, number)
176 gc.disable()
177 try:
--> 178 timing = self.inner(it, self.timer)
179 finally:
180 if gcold:
~\Anaconda2\envs\py36\lib\timeit.py in inner(_it, _timer)
NameError: name 'df' is not defined
当我尝试这个时...:[=18=]
time_iter_1_1_1 = timeit.timeit(
"""for u in df['owner'].unique():
print(u, ': ', len(df[(df['owner'] == u)]), sep = '')""")
...我收到此错误:
ERROR:root:An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line string', (1, 57))
...
NameError: name 'df' is not defined
df 已定义并且正在运行。我该如何解决这个问题?
有两种选择,要么
- 传递允许
timeit
解析名称的参数 globals
,
df = pd.DataFrame(...)
timeit.timeit(statement, globals={'df': df}) # globals=globals()
- ...或者,传递一个字符串参数
setup
为您设置 df
。
timeit.timeit(statement, setup='import pandas as pd; df = pd.DataFrame(...)')
我定义了一个 df,我已成功 运行 操作。我想计算迭代 for
循环和矢量化操作之间的区别。我已经阅读了有关如何使用 timeit 的各种示例,但是当我尝试使用它们时,出现以下错误。我做错了什么?
进口:
import h5py
import pandas as pd
import timeit
这个循环有效:
for u in df['owner'].unique():
print(u, ': ', len(df[(df['owner'] == u)]), sep = '')
但是当我尝试这样计时时......:[=18=]
s = """\
for u in df['owner'].unique():
print(u, ': ', len(df[(df['owner'] == u)]), sep = '')"""
time_iter_1_1_1 = timeit.timeit(s)
...它会产生此错误:
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-34-7526e96d565c> in <module>()
3 # print(u, ': ', len(df[(df['owner'] == u)]), sep = '')""")
4
----> 5 time_iter_1_1_1 = timeit.timeit(s)
~\Anaconda2\envs\py36\lib\timeit.py in timeit(stmt, setup, timer, number, globals)
231 number=default_number, globals=None):
232 """Convenience function to create Timer object and call timeit method."""
--> 233 return Timer(stmt, setup, timer, globals).timeit(number)
234
235 def repeat(stmt="pass", setup="pass", timer=default_timer,
~\Anaconda2\envs\py36\lib\timeit.py in timeit(self, number)
176 gc.disable()
177 try:
--> 178 timing = self.inner(it, self.timer)
179 finally:
180 if gcold:
~\Anaconda2\envs\py36\lib\timeit.py in inner(_it, _timer)
NameError: name 'df' is not defined
当我尝试这个时...:[=18=]
time_iter_1_1_1 = timeit.timeit(
"""for u in df['owner'].unique():
print(u, ': ', len(df[(df['owner'] == u)]), sep = '')""")
...我收到此错误:
ERROR:root:An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line string', (1, 57))
...
NameError: name 'df' is not defined
df 已定义并且正在运行。我该如何解决这个问题?
有两种选择,要么
- 传递允许
timeit
解析名称的参数globals
,
df = pd.DataFrame(...)
timeit.timeit(statement, globals={'df': df}) # globals=globals()
- ...或者,传递一个字符串参数
setup
为您设置df
。
timeit.timeit(statement, setup='import pandas as pd; df = pd.DataFrame(...)')