【问题标题】:Fastest way to transpose a matrix stored in an 1D array in NumPy?在 NumPy 中转置存储在一维数组中的矩阵的最快方法?
【发布时间】:2021-01-03 17:40:15
【问题描述】:

给定一个长度为N^2 的向量v 包含NxN 矩阵M 的条目,使用NumPy 在相同的向量表示中计算M 的转置的最快方法是什么?

我知道这可以通过

v.reshape(N, N).T.flatten()

但这是最快的方法吗?

我对@9​​87654327@ 的中间显式形式不感兴趣。

【问题讨论】:

  • flatten 接受 order 作为参数。我猜如果你把它设置为'A',那么你就不需要转置矩阵了
  • reshape 生成视图,T 也生成视图。但是flatten 会复制一份(转置后重新整形也会复制一份)。假设至少需要一份副本,我认为您无法提高速度。
  • 为什么要寻找“最快”而不是“最清晰”?

标签: python arrays numpy matrix


【解决方案1】:

考虑一个测试用例:

In [207]: N=1000
In [208]: X = np.arange(N*N)

您的代码:

In [209]: Y = X.reshape(N,N).T.flatten()
In [210]: timeit Y = X.reshape(N,N).T.flatten()
5.45 ms ± 13 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

建议的替代方案:

In [211]: Z = X.reshape(N,N).flatten('F')
In [212]: np.allclose(Y,Z)
Out[212]: True
In [213]: timeit Z = X.reshape(N,N).flatten('F')
5.46 ms ± 39.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

没有真正的区别。 reshapetranspose 是视图。

【讨论】:

    猜你喜欢
    • 2011-11-12
    • 2019-08-14
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    相关资源
    最近更新 更多