沿所有轴无缝高效地翻转numpy数组或稀疏矩阵

2024-10-02 04:27:47 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们有一个未知形状的矩阵(numpy数组),形状可以是(1,5)(行)、(5,1)(列)、(5,5)(正方形)、(5,6)(非正方形)或{}(退化)(最后一个例子不是矩阵,而是一个有效的输入)。在

我想要一个任意形状的矩阵(列,行,正方形,非正方形,退化)。我将返回一个翻转的上/下左/右版本。在

因为np.flip与1d数组有一些问题。我的方法是:

def flipit(M):
    return M.ravel()[::-1].reshape(M.shape)

这是可行的,但可以接受吗?有什么更快的方法吗?在

另一方面,如何对稀疏矩阵做同样的处理(例如,Mscipy.sparse.csr_matrix)。在


Tags: 方法版本numpyreturndefnp矩阵数组
1条回答
网友
1楼 · 发布于 2024-10-02 04:27:47

我们可以使用步长为-1的切片表示法来表示输入中的dim数量,从而沿着所有轴翻转,这就是原始代码的本质。这将包括数组和稀疏矩阵-

def flip_allaxes(a): # a can be array or sparse matrix
    # generate flipping slice
    sl = slice(None,None,-1) # or np.s_[::-1] suggested by @kmario23
    return a[tuple([sl]*a.ndim)]

在新的NumPy版本(15.1以后的版本)上进行了简化

在新的NumPy版本上:^{} and newer,它允许我们为需要翻转的轴指定整数元组。对于默认情况下,axis=None来自^{},它将沿所有轴翻转。因此,要解决我们的情况,它将简单地np.flip(a),这将再次覆盖泛型ndarray和稀疏矩阵。在

相关问题 更多 >

    热门问题