给定一个长度为 N^2
的向量 v
,它保存 NxN
矩阵 M
的条目,使用 NumPy 在同一向量表示中计算 M
转置的最快方法是什么?
我知道这可以通过
来完成v.reshape(N, N).T.flatten()
但是这是最快的方法吗?
我对 M
的中间显式形式不感兴趣。
最佳答案
考虑一个测试用例:
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)
没有真正的区别。 reshape
和 transpose
是 View 。
关于python - 在 NumPy 中转置存储在一维数组中的矩阵的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65552941/