小编lee*_*dam的帖子

For循环似乎比NumPy/SciPy 3D插值更快

我对NumPy/SciPy插值方法感到困惑.我实现了3D线性插值,LinearNDInterpolator我发现它非常慢.然后我在纯Python中编写了一个暴力三重循环方法,令人惊讶的是它给了我1000倍的加速.我也为Numba包装拍了一张照片,结果并没有变得更快.

通过我在互联网上找到的任何来源,与NumPy/SciPy和Numba相比,Python循环应该是超级的.但这不是我所看到的.

我发布了我运行的完整源代码.我在机器上得到这些时间:

Numpy ready:  3.94499993324  s,  result[0]=  0.480961746817
Python for loop...
Python ready:  0.0299999713898  s,  result[0]=  0.480961746817
Numba for loop...
Numba  0  ready:  0.223000049591  s,  result[0]=  0.480961746817
Numba for loop...
Numba  1  ready:  0.0360000133514  s,  result[0]=  0.480961746817
Run Code Online (Sandbox Code Playgroud)

我使用的是Anaconda Python 2.7.我在这里错过了什么?

import numpy
import scipy.interpolate
import time
from numba import jit


# x: a (40,) numpy array of ordered ints
# y: a (30,) numpy array of ordered ints
# z: a (10,) numpy array of ordered ints …
Run Code Online (Sandbox Code Playgroud)

python interpolation numpy scipy numba

9
推荐指数
1
解决办法
1267
查看次数

在函数中读取和重新分配全局字典

我在 Python 代码中遇到了一个对我来说很奇怪的错误,现在我对全局字典的工作方式感到困惑。

我的示例代码:

myDict={'two':2,'three':3}

def f():    
    print myDict        
f()
Run Code Online (Sandbox Code Playgroud)

提供我期望的输出: {'two': 2, 'three': 3}

但是,如果我用一行更改代码:

myDict={'two':2,'three':3}

def f():    
    print myDict        
    myDict={}
f()
Run Code Online (Sandbox Code Playgroud)

然后我得到

 Traceback (most recent call last):
  File "test.py", line 9, in <module>
    f()
  File "proba.py", line 7, in f
    print myDict        
UnboundLocalError: local variable 'myDict' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 如果我可以myDict在函数中打印全局f,为什么我不能重新分配它?
  2. myDict={}尽管稍后执行,该行如何中断打印命令?

我正在使用 Python 2.7。感谢您的帮助!

python dictionary

2
推荐指数
1
解决办法
3901
查看次数

标签 统计

python ×2

dictionary ×1

interpolation ×1

numba ×1

numpy ×1

scipy ×1