在多维numpy数组中沿两个轴翻转

时间:2016-11-10 19:38:56

标签: python arrays numpy multidimensional-array

所以我正在尝试进行一些数值计算,在其中,我必须翻转多维数组的第一维和第二维。我尝试了两种方法,我注意到第一种方法输出错误,第二种方法输出正确。以下是两者的代码:

for i in range(I):
    for j in range(J):
        w[:,:,i,j] = np.fliplr(w[:,:,i,j])
        w[:,:,i,j] = np.flipud(w[:,:,i,j])

w = w[::-1,::-1,:,:]

我决定尝试一个小测试用例来看看发生了什么,看起来这两种方法实际上给出了相同的答案:

a = np.array([[[1,2,3],[1,2,3]],[[1,2,3],[1,2,3]]])
print a[:,::-1,::-1]
print a.shape

(I,J,K) = a.shape
for i in range(I):
    a[i,:,:] = np.fliplr(a[i,:,:])
    a[i,:,:] = np.flipud(a[i,:,:])
print a
print a.shape

我的问题可能出现在我的代码中,或者两者之间是否存在根本不同的问题?

1 个答案:

答案 0 :(得分:1)

查看翻转函数的代码。他们只是将:: - 1索引应用于不同的维度

def fliplr
    m = asanyarray(m)
    if m.ndim < 2:
        raise ValueError("Input must be >= 2-d.")
    return m[:, ::-1]
    # ud: m[::-1, ...]

他们可以做任何事情,你可以直接使用::-1索引。