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

Numpy移调功能可加快速度和使用案例

梁鸿风
2023-03-14
问题内容

那么,为什么NumPy的转置.T速度比np.transpose()

b = np.arange(10)

#Transpose .T
t=b.reshape(2,5).T

#Transpose function
t = np.transpose(b.reshape(2,5))

#Transpose function without wrapper
t = b.reshape(2,5).transpose()

timeit在Jupyter中都做到了:

%timeit -n 1000 b.reshape(2,5).T

1000 loops, best of 3: 391 ns per loop

%timeit -n 1000 np.transpose(b.reshape(2,5))

1000 loops, best of 3: 600 ns per loop

%timeit -n 1000 b.reshape(2,5).transpose()

1000 loops, best of 3: 422 ns per loop

为了检查可扩展性,我做了一个更大的矩阵:

b = np.arange( 100000000)

%timeit -n 1000 b.reshape(10000,10000).T

1000 loops, best of 3: 390 ns per loop

%timeit -n 1000 np.transpose(b.reshape(10000,10000))

1000 loops, best of 3: 611 ns per loop

%timeit -n 1000 b.reshape(10000,10000).transpose()

1000 loops, best of 3: 435 ns per loop

在这两种情况下,该.T方法的速度都比包装器快2倍,比使用包装器快.transpose()一点?有没有一种用例会np.transpose更好?


问题答案:

原因之一可能是内部np.transpose(a)调用a.transpose(),而a.transpose()直接调用。在源代码中,您有:

def transpose(a, axes=None):
    return _wrapfunc(a, 'transpose', axes)

哪里_wrapfunc又只是:

def _wrapfunc(obj, method, *args, **kwds):
    try:
        return getattr(obj, method)(*args, **kwds)
    except (AttributeError, TypeError):
        return _wrapit(obj, method, *args, **kwds)

getattr(a, 'transpose')在这种情况下,映射到。
_wrapfunc许多模块级函数使用来访问方法,通常是ndarray该类的方法或第一个arg的类。

(注意:.T与相同.transpose(),但如果数组的尺寸小于2,则返回该数组。)



 类似资料:
  • 本文向大家介绍用Android Studio3.0新功能加快构建速度,包括了用Android Studio3.0新功能加快构建速度的使用技巧和注意事项,需要的朋友参考一下 Android Studio3.0很多新的功能,他们可以直接加快Android Studio的构建速度从而加快开发效率,构建速度直接影响到开发效率,浪费时间即浪费生命,可以通过修改一些配置,优化下构建速度。 Android St

  • 问题内容: 我在多个循环中多次使用numpy的where函数,但是它变得太慢了。有什么方法可以更快地执行此功能?我读到您应该尝试内联进行循环,并在for循环之前为函数创建局部变量,但是似乎没有什么可以提高速度的。在和有的具有形状。我用得到的瓶颈在哪里手柄,并且where在for循环是一个大的。 问题答案: 事实证明,在这种情况下,纯Python循环比NumPy索引(或对np.where的调用)要快

  • 问题内容: 我在我的python程序中使用cython进行相关计算。我有两个音频数据集,我需要知道它们之间的时差。根据开始时间切割第二组,然后在第一组上滑动。有两个for循环:一个滑动集合,而内部循环则计算该点的相关性。此方法效果很好,并且足够准确。 问题在于,使用纯python会花费超过一分钟的时间。使用我的cython代码,大约需要17秒。这仍然太多了。您是否有任何提示可以加快此代码的速度:

  • 问题内容: 我没有代码示例或任何内容,因为我不知道该怎么做,但是有人可以告诉我如何在一定时间内迅速延迟功能吗? 问题答案: 您可以使用GCD(在示例中,延迟10秒): 迅捷2 Swift 3和Swift 4

  • 问题内容: 在应用程序的核心(用Python编写并使用NumPy编写)中,我需要旋转一个四阶张量。实际上,我需要多次旋转许多张量,这是我的瓶颈。我涉及八个嵌套循环的幼稚实现(如下)似乎很慢,但是我看不到利用NumPy矩阵运算并希望加快处理速度的方法。我有一种应该使用的感觉,但是我不知道如何使用。 数学上,旋转张量T’的元素由下式给出:T’ijkl = ∑ g ia g jb g kc g ld T

  • 问题内容: 在HTTP协议中,您可以使用keep- alive在一个套接字中发送许多请求,然后立即接收来自服务器的响应,这样可以大大加快整个过程。有什么办法可以在python请求库中做到这一点吗?还是有其他方法可以使用请求库来加快速度呢? 问题答案: 就在这里。使用,默认情况下它将保持活动状态。 我想我应该举一个简单的例子: 您将注意到这些日志消息发生 如果您稍等片刻,然后重复上一次通话 请注意,