所以我正在尝试进行一些数值计算,在其中,我必须翻转多维数组的第一维和第二维。我尝试了两种方法,我注意到第一种方法输出错误,第二种方法输出正确。以下是两者的代码:
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
我的问题可能出现在我的代码中,或者两者之间是否存在根本不同的问题?
答案 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
索引。