这可能是一个微不足道的问题,但我如何在python中并行化以下循环?
# setup output lists
output1 = list()
output2 = list()
output3 = list()
for j in range(0, 10):
# calc individual parameter value
parameter = j * offset
# call the calculation
out1, out2, out3 = calc_stuff(parameter = parameter)
# put results into correct output list
output1.append(out1)
output2.append(out2)
output3.append(out3)
Run Code Online (Sandbox Code Playgroud)
我知道如何在Python中启动单线程,但我不知道如何"收集"结果.
多个过程也可以 - 对于这种情况最简单的事情.我正在使用当前的Linux,但代码应该在Windows和Mac上运行.
并行化此代码的最简单方法是什么?
我目前正在评估不同的python绘图库.现在我正在尝试使用matplotlib,我对性能非常失望.以下示例是从SciPy示例中修改的,并且每秒仅给出~8帧!
有什么方法可以加快速度,或者我应该选择不同的绘图库?
from pylab import *
import time
ion()
fig = figure()
ax1 = fig.add_subplot(611)
ax2 = fig.add_subplot(612)
ax3 = fig.add_subplot(613)
ax4 = fig.add_subplot(614)
ax5 = fig.add_subplot(615)
ax6 = fig.add_subplot(616)
x = arange(0,2*pi,0.01)
y = sin(x)
line1, = ax1.plot(x, y, 'r-')
line2, = ax2.plot(x, y, 'g-')
line3, = ax3.plot(x, y, 'y-')
line4, = ax4.plot(x, y, 'm-')
line5, = ax5.plot(x, y, 'k-')
line6, = ax6.plot(x, y, 'p-')
# turn off interactive plotting - speeds things up by 1 Frame …Run Code Online (Sandbox Code Playgroud) 我编写了以下非常简单的python代码来查找图像中的圆圈:
import cv
import numpy as np
WAITKEY_DELAY_MS = 10
STOP_KEY = 'q'
cv.NamedWindow("image - press 'q' to quit", cv.CV_WINDOW_AUTOSIZE);
cv.NamedWindow("post-process", cv.CV_WINDOW_AUTOSIZE);
key_pressed = False
while key_pressed != STOP_KEY:
# grab image
orig = cv.LoadImage('circles3.jpg')
# create tmp images
grey_scale = cv.CreateImage(cv.GetSize(orig), 8, 1)
processed = cv.CreateImage(cv.GetSize(orig), 8, 1)
cv.Smooth(orig, orig, cv.CV_GAUSSIAN, 3, 3)
cv.CvtColor(orig, grey_scale, cv.CV_RGB2GRAY)
# do some processing on the grey scale image
cv.Erode(grey_scale, processed, None, 10)
cv.Dilate(processed, processed, None, 10)
cv.Canny(processed, processed, 5, 70, 3)
cv.Smooth(processed, …Run Code Online (Sandbox Code Playgroud) 我想知道是否有更快,更省时的方法来迭代元组列表,找到正确的匹配.我所做的是:
# this is a very long list.
my_list = [ (old1, new1), (old2, new2), (old3, new3), ... (oldN, newN)]
# go through entire list and look for match
for j in my_list:
if j[0] == VALUE:
PAIR_FOUND = True
MATCHING_VALUE = j[1]
break
Run Code Online (Sandbox Code Playgroud)
此代码可能需要相当长的时间才能执行,具体取决于列表中的项目数.我相信有更好的方法可以做到这一点.
我正在尝试提出一种算法来确定x/y坐标轨迹中的转折点.下图说明了我的意思:绿色表示起点,红色表示轨迹的最终点(整个轨迹由~1500点组成):

在下图中,我手动添加了算法可能返回的可能(全局)转折点:

显然,真正的转折点总是有争议的,并且将取决于一个人指定必须位于点之间的角度.此外,转折点可以在全球范围内定义(我试图用黑色圆圈做的),但也可以在高分辨率的局部尺度上定义.我对全球(整体)方向变化感兴趣,但我很乐意看到人们用来梳理全局与本地解决方案的不同方法的讨论.
到目前为止我尝试过的:
不幸的是,这并没有给我任何强有力的结果.我可能也计算了多个点的曲率,但这只是一个想法.我真的很感激任何可能对我有帮助的算法/想法.代码可以是任何编程语言,matlab或python是首选.
编辑这里是原始数据(如果有人想要玩它):
我的模型clean()方法和基本字段验证有问题.这是我的模型和clean()方法.
class Trial(models.Model):
trial_start = DurationField()
movement_start = DurationField()
trial_stop = DurationField()
def clean(self):
from django.core.exceptions import ValidationError
if not (self.movement_start >= self.trial_start):
raise ValidationError('movement start must be >= trial start')
if not (self.trial_stop >= self.movement_start):
raise ValidationError('trial stop must be >= movement start')
if not (self.trial_stop > self.trial_start):
raise ValidationError('trial stop must be > trial start')
Run Code Online (Sandbox Code Playgroud)
我的clean()方法检查某些值是否在正确的范围内.如果用户忘记填写字段,例如movement_start,那么我收到错误:
can't compare datetime.timedelta to NoneType
我很惊讶我得到了这个错误,因为原始clean()函数应该捕获缺少的条目(毕竟movement_start是必填字段).那么如何基本检查缺失值,以及我的自定义检查值是否在某个范围内?这可以用模型的clean()方法完成,还是需要使用Forms? …
我最近将我的django安装从1.2升级到1.3.在我的开发人员系统上,我没有得到任何关于已弃用的调用的警告.但是一旦我将代码移到我的生产apache服务器上,我在apache日志中看到了很多'DeprecationWarning'消息.那么我如何调用runserver来获取这些消息呢?
目前我称之为:
python manage.py runserver --verbosity 2
Run Code Online (Sandbox Code Playgroud) 我是CUDA编程的新手,我想知道如何将pyCUDA的性能与普通C中实现的程序进行比较.性能大致相同吗?我应该注意哪些瓶颈?
编辑: 我显然首先试图谷歌这个问题,并惊讶于没有找到任何信息.即我会排除pyCUDA人在他们的常见问题解答中回答这个问题.
mex在Matlab中调用文件(用c/c ++编写)通常很容易加速某些计算.然而,根据我的经验,Matlab的真正瓶颈是数据绘图.创建句柄非常昂贵,即使您只更新句柄数据(例如,XData,YData,ZData),这可能需要很长时间.更糟糕的是,由于Matlab是一个单线程程序,因此不可能同时更新多个图.
因此我的问题是:是否有可能编写一个Matlab GUI并调用C++(或其他一些可并行化的代码)来处理绘图/可视化?我正在寻找一个可以在Windows,Mac和Linux上运行的跨平台解决方案,但任何让我开始使用任何操作系统的解决方案都非常感谢!
我找到了一个似乎使用Matlab 语法的C++库,plot()但我不确定这是否会加快速度,因为我担心如果我在Matlab的figure()窗口中绘图,事情可能会再次放慢速度.
我很感激以前处理过这种情况的人的任何意见和反馈!
编辑:显然,我已经描述了我的代码,瓶颈是绘图(十几个包含大量数据的面板).
EDIT2:为了获得赏金,我需要一个真实的生活,最简单的工作实例如何做到这一点 - 暗示性的答案对我没有帮助.
EDIT3:关于要绘制的数据:在最简单的情况下,考虑20个线图,需要每秒更新一次,如1000000个数据点.
编辑4:我知道这是一个巨大的积分,但我从来没有说过这个问题很简单.我不能忽略某些数据点,因为在实际绘制它们之前无法评估哪些点是重要的(数据采样时间为亚毫秒时间分辨率).事实上,我的数据是使用商业数据采集系统获得的,该系统附带数据查看器(用c ++编写).该程序可以直观地显示多达60个线图,甚至超过1000000个数据点.
编辑5:我不喜欢当前讨论的目的.我知道对我的数据进行二次采样可能会加快速度 - 然而,这不是问题所在.这里的问题是如何让ac/c ++/python/java接口与matlab一起工作,以期通过直接与硬件交谈(或使用任何其他技巧/方式)加快绘图速度
我正在使用reportlab生成一些pdf文件.我有一个重复的部分.它包含一个标题和一个表:
Story.append(Paragraph(header_string, styleH))
Story.append(table)
Run Code Online (Sandbox Code Playgroud)
如何将段落与表格分组(在乳胶中我会将它们放入相同的环境中),以便在页面制动的情况下,段落和表格保持在一起?目前,段落有时会浮动在一页的末尾,表格从下一页开始.