小编Mat*_*lem的帖子

使用numba jit,Python的段间距离

在过去的一周里,我一直在问这个堆栈上的相关问题,试图找出我不理解在Python中使用Numba的@jit装饰器的事情.但是,我正在撞墙,所以我只会写出整个问题.

手头的问题是计算大量段之间的最小距离.这些段由它们在3D中的起点和终点表示.在数学上,每个段被参数化为[AB] = A +(BA)*s,其中s在[0,1]中,A和B是段的起点和终点.对于两个这样的段,可以计算最小距离并且在给出公式.

我已经在另一个线程上暴露了这个问题,并且给出的答案是通过向量化问题替换我的代码的双循环,然而这会对大量段的内存问题造成影响.因此,我决定坚持使用循环,而是使用numba的jit代替.

由于问题的解决方案需要大量的点积,并且numba不支持 numpy的点积,所以我开始实现自己的3D点积.

import numpy as np
from numba import jit, autojit, double, float64, float32, void, int32

def my_dot(a,b):
    res = a[0]*b[0]+a[1]*b[1]+a[2]*b[2]
    return res

dot_jit = jit(double(double[:], double[:]))(my_dot)    #I know, it's not of much use here.
Run Code Online (Sandbox Code Playgroud)

计算N个段中所有对的最小距离的函数将Nx6数组作为输入(6个坐标)

def compute_stuff(array_to_compute):
    N = len(array_to_compute)
    con_mat = np.zeros((N,N))
    for i in range(N):
        for j in range(i+1,N):

            p0 = array_to_compute[i,0:3]
            p1 = array_to_compute[i,3:6]
            q0 = array_to_compute[j,0:3]
            q1 = array_to_compute[j,3:6]

            s …
Run Code Online (Sandbox Code Playgroud)

python jit numpy numba

8
推荐指数
1
解决办法
540
查看次数

Python,Pairwise'distance',需要一种快速的方法来实现它

对于我博士的侧面项目,我参与了使用Python建模一些系统的任务.效率明智,我的程序遇到了以下问题的瓶颈,我将在最小工作示例中公开.

我处理由其3D起点和终点编码的大量段,因此每个段由6个标量表示.

我需要计算成对最小的段间距离.在该源中找到两个段之间的最小距离的解析表达式.致MWE:

import numpy as np
N_segments = 1000
List_of_segments = np.random.rand(N_segments, 6)

Pairwise_minimal_distance_matrix = np.zeros( (N_segments,N_segments) )
for i in range(N_segments):
    for j in range(i+1,N_segments): 

        p0 = List_of_segments[i,0:3] #beginning point of segment i
        p1 = List_of_segments[i,3:6] #end point of segment i
        q0 = List_of_segments[j,0:3] #beginning point of segment j
        q1 = List_of_segments[j,3:6] #end point of segment j
        #for readability, some definitions
        a = np.dot( p1-p0, p1-p0)
        b = np.dot( p1-p0, q1-q0)
        c = np.dot( q1-q0, q1-q0) …
Run Code Online (Sandbox Code Playgroud)

python binary performance distance

7
推荐指数
1
解决办法
2610
查看次数

python的Numba问题,没有模块llvmlite.binding

有关于Numba和llvm编译器的大量文档.到目前为止我在OS X 10.10(Yosemite)上做了什么

pip install numba

brew install llvm
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但是当我导入numba时,我无法解决此错误消息

import numba
Run Code Online (Sandbox Code Playgroud)

错误信息

我试图拉llvmlite的git存储库并设置它但无济于事.这里有什么问题 ?

python numba

5
推荐指数
1
解决办法
1803
查看次数

调用轮廓而不绘制它,python,pylab 内联

对于我使用轮廓的算法,但我只对其路径集合感兴趣。自从我打电话以来

pylab inline
Run Code Online (Sandbox Code Playgroud)

从一开始,现在在没有内联的情况下重写代码太痛苦了(许多函数必须更仔细地声明,例如 np.something() 而不是 Something() 等...),我想知道是否有是一种调用轮廓而不绘制等高线图的方法吗?就像是

contour(image_matrix, 'No Show')? 
Run Code Online (Sandbox Code Playgroud)

问候

python matplotlib contour

5
推荐指数
1
解决办法
5023
查看次数

用不同的颜色动画一条线

我正在尝试为演示文稿制作动画数据。我正在尝试使用 python 的动画包来做到这一点。我想要做的大致归结为http://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/ 中的第一个例子

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation

# First set up the figure, the axis, and the plot element we want to animate
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)

# initialization function: plot the background of each frame
def init():
    line.set_data([], [])
    return line,

# animation function.  This is called sequentially
def animate(i):
    x = np.linspace(0, 2, 1000)
    y …
Run Code Online (Sandbox Code Playgroud)

python animation matplotlib

3
推荐指数
1
解决办法
3871
查看次数

使用numba JIT加速功能的麻烦

我是numba jit的新手.对于个人项目,我需要加速类似于下面显示的功能,但是为了编写独立示例的目的不同.

import numpy as np
from numba import jit, autojit, double, float64, float32, void

def f(n):
    k=0.
    for i in range(n):
        for j in range(n):
            k+= i+j

def f_with_return(n):
    k=0.
    for i in range(n):
        for j in range(n):
            k+= i+j
    return k

def f_with_arange(n):
    k=0.
    for i in np.arange(n):
        for j in np.arange(n):
            k+= i+j

def f_with_arange_and_return(n):
    k=0.
    for i in np.arange(n):
        for j in np.arange(n):
            k+= i+j  


#jit decorators
jit_f = jit(void(int32))(f)
jit_f_with_return = jit(int32(int32))(f_with_return)
jit_f_with_arange = jit(void(double))(f_with_arange) …
Run Code Online (Sandbox Code Playgroud)

python jit numpy numba

3
推荐指数
1
解决办法
1264
查看次数

Matplotlib,控制mark_inset()属性(kwargs)

我正在尝试用matplotlib制作带有插入缩放的绘图.我发现以下示例将生成带有插图的图:

import matplotlib.pyplot as plt

from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes
from mpl_toolkits.axes_grid1.inset_locator import mark_inset

import numpy as np


def get_demo_image():
    from matplotlib.cbook import get_sample_data
    import numpy as np
    f = get_sample_data("axes_grid/bivariate_normal.npy", asfileobj=False)
    z = np.load(f)
    # z is a numpy array of 15x15
    return z, (-3, 4, -4, 3)

fig, ax = plt.subplots(figsize=[5, 4])

# prepare the demo image
Z, extent = get_demo_image()
Z2 = np.zeros([150, 150], dtype="d")
ny, nx = Z.shape
Z2[30:30 + ny, 30:30 + nx] = Z

# …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

3
推荐指数
1
解决办法
3074
查看次数

与Bokeh相关的滑块,如何编写回调

我希望能够浏览许多图表,这些图表是3维以上的模拟结果.我通过Python使用Bokeh包.

为简单起见,我们假设我有两个维度:dnc.但是nc以下列方式依赖于d:

if d=100, nc=56,57
if d=20, nc=5,6
Run Code Online (Sandbox Code Playgroud)

我有4张照片:

 d_100_nc_56.png, 
 d_100_nc_57.png, 
 d_20_nc_5.png,
 d_20_nc_6.png
Run Code Online (Sandbox Code Playgroud)

所以我想要两个滑块,一个用于d,一个用于nc,通过Bokeh.plotting.Figure的image_url函数循环.png图像.但是,当我更改d中的滑块时,nc滑块的值应自行更新

from bokeh.io import vform
from bokeh.models import CustomJS, ColumnDataSource, Slider
from bokeh.plotting import Figure, output_file, show

output_file('image.html')

source = ColumnDataSource(data=dict(url=['d_100_nc_55.png']))

p = Figure(x_range=(0,1), y_range=(0,1))

callback_nc = CustomJS(args=dict(source=source),  code="""
    var data = source.get('data');
    var f = cb_obj.get('value')
    old = data['url'][0]
    to_replace=old.substring(old.lastIndexOf("nc_")+3,old.lastIndexOf(".png"))

    data['url'][0] = old.replace(to_replace,f.toString(10))
    source.trigger('change');
""")

callback_d = CustomJS(args=dict(source=source), code="""
    var data = source.get('data');
    var …
Run Code Online (Sandbox Code Playgroud)

javascript python interactive slider bokeh

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