当前位置: 首页 > 面试题库 >

改善Numpy表现

萧焱
2023-03-14
问题内容

我想使用python改善卷积性能,并希望对如何最好地改善性能有一些见解。

我目前正在使用scipy进行卷积,使用的代码类似于下面的代码段:

import numpy
import scipy
import scipy.signal
import timeit

a=numpy.array ( [ range(1000000) ] )
a.reshape(1000,1000)
filt=numpy.array( [ [ 1, 1, 1 ], [1, -8, 1], [1,1,1] ] )

def convolve():
  global a, filt
  scipy.signal.convolve2d ( a, filt, mode="same" )

t=timeit.Timer("convolve()", "from __main__ import convolve")
print "%.2f sec/pass" % (10 * t.timeit(number=10)/100)

我正在使用灰度级(0到255之间的整数值)处理图像数据,并且当前每个卷积得到大约四分之一秒。我的想法是执行以下操作之一:

使用corepy,最好进行一些优化使用icc和ikml重新编译numpy。使用python-cuda。

我想知道是否有人对这些方法有任何经验(通常会获得什么样的收益,并且值得花时间),或者是否有人知道有更好的库可以与Numpy进行卷积。

谢谢!

编辑:

通过使用Numpy在C语言中重写python循环,可将速度提高约10倍。


问题答案:

scipy中用于执行2d卷积的代码有点混乱且未优化。如果要了解scipy的低级功能,请参阅http://svn.scipy.org/svn/scipy/trunk/scipy/signal/firfilter.c。

如果您想要的只是使用一个小的,恒定的内核(如您所示的内核)进行处理,则可以使用如下功能:

def specialconvolve(a):
    # sorry, you must pad the input yourself
    rowconvol = a[1:-1,:] + a[:-2,:] + a[2:,:]
    colconvol = rowconvol[:,1:-1] + rowconvol[:,:-2] + rowconvol[:,2:] - 9*a[1:-1,1:-1]
    return colconvol

此函数利用了上面建议的DarenW之类的内核可分离性,并且利用了更优化的numpy算术例程。根据我的测量,它比convolve2d函数快1000倍以上。



 类似资料:
  • 通过对 manifest.json 进行相应配置,可以提升 PWA 从主屏幕启动时的应用体验。 添加启动画面 设置显示类型 指定显示方向 设置主题色 添加启动画面 当 PWA 从主屏幕点击打开时,幕后执行了若干操作: 启动浏览器 启动显示页面的渲染器 加载资源 在这个过程中,由于页面未加载完毕,因此屏幕将显示空白并且看似停滞。如果是从网络加载的页面资源,白屏过程将会变得更加明显。因此 PWA 提供

  • 问题内容: 有没有人对如何提高CSS3动画的流畅度有一些作弊技巧?我使用css过渡将整个页面向左滑动,比我想要的更加混乱。它是一个元素,但由于页面复杂,因此包含许多圆角,渐变,阴影等。 在Flash ActionScript中,有一个方便的属性,可以在动画开始之前将动画元素转换为位图。这是天赐之物,可显着加快某些类型的动画的速度。CSS有这样的东西吗?是否还有其他技巧可以在不简化页面设计的情况下提

  • 这几乎完全是视频练习,其中我演示了如何改进你至今为止编写的代码的性能,但首先你应该尝试它。你已经分析了 练习 18 的代码的速度有多慢,所以现在是时候实现你的一些想法。修复简单的性能问题时,我会给你一个简单的列表来寻找和修改: 循环内的循环的重复计算可以避免。冒泡排序是经典案例,这就是我教它的原因。,一旦你看到,冒泡排序与其他方法相比有多糟糕,你将开始认识到这是一个需要避免的常见模式。 重复计算一

  • 问题内容: 我们从JBoss 4(和JDK 5)升级到JBoss 5(和JDK 6)。问题是开始时间已经从1.5分钟(在JBoss 4上)增加到4分钟以上。 似乎花费JBoss最长时间来初始化的组件是JMX 从调试服务器日志中,我在有问题的时间得到以下行: 项目中没有EJB。 内存设置为: 您是否知道如何改善JBoss的启动时间? 更新: 到目前为止没有运气,我尝试了shreeni的建议(更改了扫

  • 问题内容: 今天,我遇到了一个有趣的SQL问题,尽管我想出了一个行之有效的解决方案,但我怀疑这是最佳还是最有效的答案。在这里,我请专家- 帮助我学习一些知识并改善查询条件!RDBMS是SQL Server 2008 R2,查询是SSRS报告的一部分,该报告将针对约100,000行运行。 本质上,我有一个ID列表,该ID可能具有多个与之关联的值,这些值是Yes,No或其他字符串。对于ID x,如果任

  • 问题内容: 动机 最近,我在寻找一种无需向构造函数传递大量参数即可初始化复杂对象的方法。我使用了构建器模式进行了尝试,但是我不喜欢这样的事实,即如果我真的设置了所有需要的值,就无法在编译时检查。 传统建筑图案 当我使用构建器模式创建对象时,创建起来更“类型安全”,因为更容易了解参数的用途: 但是现在我有一个问题,我很容易错过一个重要的参数。我可以在方法中检查它,但这仅在运行时进行。如果我错过了一些