【发布时间】:2015-07-13 14:49:02
【问题描述】:
我这辈子都想不通。
我正在尝试删除数组第二轴中的所有其他元素。我在 MATLAB 中使用arr(:,:,2:2:end) = []; 执行此操作,但是当我尝试在 Python 中执行相同操作并比较两个输出时,我得到了一个不同的矩阵。
我尝试过arr = np.delete(arr,np.arange(0,arr.shape[2],2),2) 和arr = arr[:,:,1::2],但似乎都没有想出我用 MATLAB 得到的东西。
示例:
MATLAB
disp(['before: ',str(arr[21,32,11])])
arr(:,:,2:2:end) = [];
disp(['after: ',str(arr[21,32,11])])
输出:
before: 99089
after: 65699
Python
print 'before: ' + str(arr[20,31,10])
arr = arr[:,:,1::2] # same output as np.delete(arr,np.arange(0,arr.shape[2],2),2)
print 'after: ' + str(arr[20,31,10])
输出:
before: 99089
after: 62360
我希望我没有忽略一些基本的东西。
【问题讨论】:
-
arr = arr[:,:,::2]怎么样? -
@Divakar 好的,这实际上解决了所有问题。你介意解释一下为什么
::2与1::2的工作方式不同吗? -
好吧,
[1::2]从[1]即2nd元素开始索引,但您希望从1st即[0]元素开始。因此,或者,您可以使用arr = arr[:,:,0::2]来表示相同的意思和效果。 -
@Divakar 实际上,我意识到我在我的 MATLAB 示例中打错了字。应该是
arr(:,:,2:2:end) = [];(我不知道我是怎么搞砸的)。无论如何,您的回答似乎解决了我遇到的问题,但是如果我想匹配 MATLAB,我不应该从 Python 中的[1]th开始吗? -
arr[:,:,::2]是选择元素,=[];是删除内容。所以,那种翻转的东西。