在过去的一周里,我一直在问这个堆栈上的相关问题,试图找出我不理解在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建模一些系统的任务.效率明智,我的程序遇到了以下问题的瓶颈,我将在最小工作示例中公开.
我处理由其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) 有关于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存储库并设置它但无济于事.这里有什么问题 ?
对于我使用轮廓的算法,但我只对其路径集合感兴趣。自从我打电话以来
pylab inline
Run Code Online (Sandbox Code Playgroud)
从一开始,现在在没有内联的情况下重写代码太痛苦了(许多函数必须更仔细地声明,例如 np.something() 而不是 Something() 等...),我想知道是否有是一种调用轮廓而不绘制等高线图的方法吗?就像是
contour(image_matrix, 'No Show')?
Run Code Online (Sandbox Code Playgroud)
问候
我正在尝试为演示文稿制作动画数据。我正在尝试使用 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) 我是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) 我正在尝试用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) 我希望能够浏览许多图表,这些图表是3维以上的模拟结果.我通过Python使用Bokeh包.
为简单起见,我们假设我有两个维度:d和nc.但是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) python ×8
matplotlib ×3
numba ×3
jit ×2
numpy ×2
animation ×1
binary ×1
bokeh ×1
contour ×1
distance ×1
interactive ×1
javascript ×1
performance ×1
slider ×1