gpt4 book ai didi

python - python中转置函数的区别

转载 作者:太空狗 更新时间:2023-10-29 21:49:00 25 4
gpt4 key购买 nike

我正在使用 numpy.matrix() 生成一个带有随机数的大矩阵(100x100,我们称它为 X),这样我就有了一个 numpy.ndarray。

我一直在想这两种操作有什么区别:

  1. numpy.transpose(X)
  2. X.T

我测量了一个范围为 1000 的循环中每个操作的时间,似乎 X.T 明显快于 numpy.transpose(X)

添加的基准:

对于 100x100 矩阵,我使用 X.Tnumpy.tranpose(X) 得到了以下结果

在 10.000 范围循环中:

  • 7421/10.000:X.T最快
  • 1256/10.000:numpy.transpose(X)最快
  • 1323/10.000:相同的计算时间或差异太小而无法确定

添加了下面的代码

    import numpy as np
import time

np_transpose_count = 0
T_transpose_count = 0
equal_count = 0

for i in range(10000):
Se = np.random.rand(100,100)

tic1 =time.clock()
ST_T = Se.T
toc1=time.clock()

tic2 =time.clock()
ST_np = np.transpose(Se)
toc2=time.clock()

if (toc1-tic1) < (toc2-tic2):
T_transpose_count+=1
elif (toc1-tic1) > (toc2-tic2):
np_transpose_count+=1
else:
equal_count+=1

print(T_transpose_count, np_transpose_count, equal_count)

最好的问候呼呼声

最佳答案

使用 Ipython %timeit 魔法我得到:

In [218]: X=np.ones((100,100))

In [219]: timeit X.T
1000000 loops, best of 3: 379 ns per loop

In [220]: timeit X.transpose()
1000000 loops, best of 3: 470 ns per loop

In [221]: timeit np.transpose(X)
1000000 loops, best of 3: 993 ns per loop

In [222]: timeit X+1
10000 loops, best of 3: 21.6 µs per loop

是的,.T 最快,函数最慢。但是将这些时间与简单加法的时间进行比较

或副本或切片

In [223]: timeit X.copy()
100000 loops, best of 3: 10.8 µs per loop

In [224]: timeit X[:]
1000000 loops, best of 3: 465 ns per loop

转置以其所有形式返回一个新的数组对象,具有新的 shapestrides,但具有共享数据缓冲区(查看 .__array_interface__ 字典来查看)。因此,它与返回 view 的其他操作花费的时间大致相同。但是没有一个转置函数会复制数据或遍历它。所以时差只是头顶调用的结果。

再次使用 ipython 魔法

np.transpose??
def transpose(a, axes=None):
try:
transpose = a.transpose
except AttributeError:
return _wrapit(a, 'transpose', axes)
return transpose(axes)

因此 np.function(X) 最终调用 X.transpose()

我必须查看 numpy 代码,但我记得 .T 是作为 attribute 实现的(与 property 不完全相同)。我怀疑它更快,因为它不使用 axes 参数,因此节省了一两次 C 函数调用。

关于python - python中转置函数的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37408685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com