我很困惑,不同的是什么之间jit和autojit.
我读过这个:
http://numba.pydata.org/numba-doc/0.6/doc/userguide.html
但不能说我知道两种选择之间的选择有信心.有人可以详细说明,最好是一个例子.
谢谢
这可能非常明显,但只是想确保我理解runsnakerun中的列是什么.
名称,呼叫,RCalls,本地,/呼叫,暨,/呼叫,文件,线路,目录
以下是我认为我理解的一些内容
名称 - 被调用函数的名称
剩下的就是那些我不觉得冒险的人:
谢谢
我有以下代码
import scipy.misc
import matplotlib.pyplot as plt
a = plt.imshow(scipy.misc.lena())
Run Code Online (Sandbox Code Playgroud)
而我希望通过访问a或它的孩子来获取lena的数据.
究其原因,我将访问图像plt.gcf()或plt.gca()
这是我第一次尝试对 python 使用 JIT,这是我想要加速的用例。我读了一些关于 numba 的内容,它看起来很简单,但以下代码没有提供任何加速。请原谅我可能犯的任何明显错误。
我也尝试按照 cython 基本教程的建议进行操作,但时间上没有区别。 http://docs.cython.org/src/tutorial/cython_tutorial.html
我猜我必须做一些类似声明变量的事情?使用其他库?专门为所有事情使用 for 循环?如果有任何可以参考的指导或示例,我将不胜感激。
例如,我从之前的问题中知道mpmath 中的元素操作比 numpy 慢,并且其解决方案使用 gmpy 而不是 mpmath 明显更快。
import numpy as np
from scipy.special import eval_genlaguerre
from sympy import mpmath as mp
from sympy.mpmath import laguerre as genlag2
import collections
from numba import jit
import time
def len2(x):
return len(x) if isinstance(x, collections.Sized) else 1
@jit # <-- removing this doesn't change the output time if anything it's slower with this
def laguerre(a, b, x): …Run Code Online (Sandbox Code Playgroud) 我在 Ubuntu 14.04 上。
我本来希望这样做:
sudo apt-get install python-numpy
Run Code Online (Sandbox Code Playgroud)
会起作用,但事实并非如此......
我试图检查的方法是通过做locate blas,但没有发现任何相关的东西。
我想要一个不涉及我从源代码编译的解决方案。
理想的解决方案是使用 ubuntu 存储库。
我试图理解使用numpy列表对列表列表进行比较的内存和其他开销影响.dtype object
这是否随维度而变化?例如2D与3D对比ND.
我在使用numpy数组时可以想到的一些好处是类似的东西.shape,.T并且你可以np.matrix更快地将它们作为矩阵转换.
还有别的事吗?
此外,如果有人对我正在使用的对象感兴趣:
import gmpy2 as gm
gm.mpfr( '0' ) # <-- this is the object
Run Code Online (Sandbox Code Playgroud)
编辑:
只是为了澄清我对numpy数组类型object不是本机numpy类型的情况感兴趣.
编辑2:
有关速度的相关跟进.
我正在研究这个例子:
http://numba.pydata.org/numba-doc/0.15.1/examples.html#multi-threading
它指出:
您应该确保此时已编译inner_func,因为编译必须在主线程上进行。在此示例中就是这种情况,因为我们使用jit()。
在该示例中,似乎在函数上调用jit可以确保在那时进行编译。
如果不是调用jit我们用jit指定为修饰符的参数类型使用的函数,多线程示例是否可以工作?我认为这等同于询问如果用装饰器将其绑定,是否可以在定义时编译该函数。
import numba as nb
import numpy as np
def inner_func(result, a, b):
threadstate = savethread()
for i in range(len(result)):
result[i] = np.exp(2.1 * a[i] + 3.2 * b[i])
restorethread(threadstate)
signature = nb.void(nb.double[:], nb.double[:], nb.double[:])
inner_func_nb = nb.jit(signature, nopython=True)(inner_func)
Run Code Online (Sandbox Code Playgroud)
与
import numba as nb
import numpy as np
signature = nb.void(nb.double[:], nb.double[:], nb.double[:])
@nb.jit(signature, nopython=True)
def inner_func(result, a, b):
threadstate = savethread()
for i in range(len(result)):
result[i] = np.exp(2.1 * a[i] …Run Code Online (Sandbox Code Playgroud) 我使用的是 Ubuntu 14.04,并且 numba 0.15 运行良好。
我跑了:
pip install --user --upgrade numba
Run Code Online (Sandbox Code Playgroud)
升级到 numba 0.16 但现在当我尝试导入 numba 时出现以下错误:
~/.local/lib/python2.7/site-packages/numba/__init__.py in <module>()
4 from __future__ import print_function, division, absolute_import
5 import re
----> 6 from . import testing, decorators
7 from ._version import get_versions
8 from . import special, types, config
~/.local/lib/python2.7/site-packages/numba/decorators.py in <module>()
5 import warnings
6 from . import sigutils
----> 7 from .targets import registry
8
9 # -----------------------------------------------------------------------------
~/.local/lib/python2.7/site-packages/numba/targets/registry.py in <module>()
1 from __future__ import print_function, division, …Run Code Online (Sandbox Code Playgroud) 有大量问题和人们询问如何设置框架高度/宽度的相应答案。下面是一个小样本:
我知道 OpenCV 有时会在设置框架高度/宽度时出现问题。就我而言,我可以将宽度/高度范围设置为 640 x 512。相机的驱动程序由制造商提供(即不是 v4l2 或类似的东西)。我可以提供哪些调试信息,或者我如何帮助他们理解为什么我不能设置更高的宽度/帧。驱动程序是否有问题,OpenCV 两者都有?
import cv2
c = cv2.VideoCapture(1)
c.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 1280)
c.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 1024)
Run Code Online (Sandbox Code Playgroud)
我在 Python 中使用 Ubuntu 14.04 和 OpenCV 2.4.8。
我发现这个问题有一个公认的答案,表明我应该能够让它发挥作用。我不知道如何做这部分:
您可以做的是调查您的相机驱动程序,为 OpenCV 制作补丁并将其发送到 code.opencv.org。这样别人会喜欢你的工作,就像你喜欢别人的一样。
我试图.reshape在一个numpy数组上使用时遇到了内存问题,并想知道我是否能够以某种方式重塑阵列,这将是非常好的.
我意识到我可以通过简单地改变.shape值来重塑数组.不幸的是,当我尝试使用时,.shape我再次遇到了一个内存错误,让我觉得它没有重塑到位.
我想知道我什么时候使用另一个?
任何帮助表示赞赏.
如果您想了解更多信息,请告诉我们.
编辑:
我添加了我的代码,以及在重要的情况下如何创建我想要重塑的矩阵.
根据您的记忆更改N值.
import numpy as np
N = 100
a = np.random.rand(N, N)
b = np.random.rand(N, N)
c = a[:, np.newaxis, :, np.newaxis] * b[np.newaxis, :, np.newaxis, :]
c = c.reshape([N*N, N*N])
c.shape = ([N, N, N, N])
Run Code Online (Sandbox Code Playgroud)
EDIT2:这是一个更好的代表.显然,转置似乎很重要,因为它将数组从C连续变为F连续,并且在上面的情况下得到的乘法是连续的,而在下面的那个不是.
import numpy as np
N = 100
a = np.random.rand(N, N).T
b = np.random.rand(N, N).T
c = a[:, np.newaxis, :, np.newaxis] * b[np.newaxis, :, np.newaxis, :]
c = c.reshape([N*N, …Run Code Online (Sandbox Code Playgroud)