小编RAA*_*AAC的帖子

提高Python模块导入的速度

之前已经问过如何加速导入Python模块的问题(加速python"import"加载器Python - 加速进口?)但是没有具体的例子并且没有产生可接受的解决方案.因此,我将在这里再次讨论这个问题,但这次是一个具体的例子.

我有一个Python脚本,从磁盘加载三维图像堆栈,平滑它,并将其显示为电影.当我想快速查看我的数据时,我从系统命令提示符调用此脚本.我可以用700毫秒来平滑数据,因为这与MATLAB相当.但是,导入模块需要额外的650 ms.因此,从用户的角度来看,Python代码的运行速度只有其一半.

这是我导入的一系列模块:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import scipy.ndimage
import scipy.signal
import sys
import os
Run Code Online (Sandbox Code Playgroud)

当然,并非所有模块的导入速度都相同.罪魁祸首是:

matplotlib.pyplot   [300ms]
numpy               [110ms]
scipy.signal        [200ms]
Run Code Online (Sandbox Code Playgroud)

我已经尝试过使用from,但这并不快.由于Matplotlib是主要的罪魁祸首,它因缓慢的屏幕更新而闻名,我寻找替代方案.一个是PyQtGraph,但导入需要550毫秒.

我知道一个明显的解决方案,即从交互式Python会话而不是系统命令提示符调用我的函数.这很好但是它太像MATLAB了,我更喜欢从系统提示中获得我的功能的优雅.

我是Python的新手,我不知道如何继续这一点.由于我是新手,我很欣赏有关如何实施建议解决方案的链接.理想情况下,我正在寻找一个简单的解决方案(不是我们所有人!),因为代码需要在多台Mac和Linux机器之间移植.

python import performance module

34
推荐指数
3
解决办法
2万
查看次数

Numpy以MATLAB的一半速度运行

我一直在将MATLAB代码移植到Python上,经过大量工作后,我发现了一些有用的东西.然而,缺点是Python运行我的代码比MATLAB运行得慢.我知道使用优化的ATLAS库会加快速度,但实际上实现这一点会让我感到困惑.这是发生了什么:

我启动了没有安装BLAS的ipython会话:

import numpy.distutils.system_info as sysinfo
import time
In [11]: sysinfo.get_info('atlas')
Out[11]: {}

timeit( eig(randn(1E2,1E2)) )
100 loops, best of 3: 13.4 ms per loop
Run Code Online (Sandbox Code Playgroud)

Matlab中的相同代码运行速度是原来的两倍

tic,eig(randn(1E2));toc*1000
    6.5650   
Run Code Online (Sandbox Code Playgroud)

我从Ubuntu存储库安装了非优化的ATAS deb.重新启动ipython,现在我得到:

In [2]: sysinfo.get_info('atlas')
 ...
Out[2]: 
{'define_macros': [('ATLAS_INFO', '"\\"3.8.4\\""')],
 'include_dirs': ['/usr/include/atlas'],
 'language': 'f77',
 'libraries': ['lapack', 'f77blas', 'cblas', 'atlas'],
 'library_dirs': ['/usr/lib/atlas-base/atlas', '/usr/lib/atlas-base']}
Run Code Online (Sandbox Code Playgroud)

和测试代码:

In [4]: timeit( eig(randn(1E2,1E2)) )
100 loops, best of 3: 16.8 ms per loop
Run Code Online (Sandbox Code Playgroud)

所以没有更快.如果有任何触摸速度较慢.但我还没有切换到优化的BLAS.我按照这些说明操作:http://danielnouri.org/notes/category/python/我构建库并用这些库覆盖非优化版本.我重新开始ipython但是没有变化:

In [4]: timeit( eig(randn(1E2,1E2)) )
100 loops, best of 3: …
Run Code Online (Sandbox Code Playgroud)

python performance matlab numpy atlas

12
推荐指数
1
解决办法
4345
查看次数

将原始数据覆盖到geom_bar

我有一个数据框架,安排如下:

condition,treatment,value
A        ,  one    , 2
A        ,  one    , 1
A        ,  two    , 4
A        ,  two    , 2
...
D        ,  two    , 3
Run Code Online (Sandbox Code Playgroud)

我已经使用ggplot2制作了一个看起来像这样的分组条形图: 样例

这些条按“条件”分组,颜色表示“处理”。条高是每个条件/治疗对的平均值。我通过创建一个新的数据框来实现这一点,该数据框包含构成每个组的所有点的均值和标准误差(对于误差线)。

我想做的是叠加原始抖动数据以生成该箱形图的条形图版本:http : //docs.ggplot2.org/0.9.3.1/geom_boxplot-6.png [我意识到箱形图可能会更好,但是我的双手被绑住了,因为客户在病态上依附在条形图上]

我尝试将geom_point对象添加到绘图中,并向其提供原始数据(而不是用于制作条形的聚合平均值)。这种工作,但是它在错误的x轴位置绘制原始值。它们出现在红色和灰色条连接的点处,而不是出现在相应条的中心。所以我的情节看起来像这样:

看错情节

我无法弄清楚如何将点移动固定量然后抖动以使它们居中放置在正确的小节上。有人知道吗 也许有更好的方法来实现我的目标?

以下是显示我有问题的一个最小示例:

#Make some fake data
ex=data.frame(cond=rep(c('a','b','c','d'),each=8),
    treat=rep(rep(c('one','two'),4),each=4),
    value=rnorm(32) + rep(c(3,1,4,2),each=4) )

#Calculate the mean and SD of each condition/treatment pair
agg=aggregate(value~cond*treat, data=ex, FUN="mean") #mean
agg$sd=aggregate(value~cond*treat, data=ex, FUN="sd")$value #add the SD 


dodge <- position_dodge(width=0.9) 
limits <- aes(ymax=value+sd, ymin=value-sd) #Set up the …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

4
推荐指数
2
解决办法
6918
查看次数

标签 统计

performance ×2

python ×2

atlas ×1

ggplot2 ×1

import ×1

matlab ×1

module ×1

numpy ×1

r ×1