我正在寻找一种高效的方法(最好是矢量化的快速内置函数)以对numpy数组进行对角线顺序展平。例如:
A=np.array([[1,2,3],
[4,5,6],
[7,8,9]])
b=flatten_diagonally(A)
b
应该是 [7,4,8,1,5,9,2,6,3]
。
A
将会是一个非常大的矩阵,因此我不想逐个迭代元素。出于同样的原因,我也不想提前准备所有正确顺序的索引列表。由于 A
很大且结果将同样很大,我希望避免使用过多的内存的解决方案。
如果我能够指定我想要展平哪些对角线子集,那就更好了,例如只展平第一和第二条对角线将会得到 [1,5,9,2,6]
。
numpy.fromiter
。 - Joe Kingtonscipy.sparse.dia_matrix
和scipy.sparse.spdiags
。实现你想要的一种方法是将事物暂时转换为scipy.sparse.dia_matrix
,但对于密集矩阵来说,这不会是内存高效的。 - Joe Kingtonnumpy.fromiter
相比会很有趣。不过,Cython应该是完美的选择! - Joe Kington