我怎么也想不出来这个问题的解决方法。
我正在尝试删除数组第二轴中每隔一个元素。在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[1::2]
从[1]
即第二个元素开始索引,但你想要从第一个即[0]
元素开始。因此,你可以使用arr = arr[:,:,0::2]
来达到同样的效果。 - Divakararr(:,:,2:2:end) = [];
(我不确定我是如何搞砸的)。无论如何,你的答案似乎修复了我遇到的问题,但是如果我想与MATLAB匹配,我是否应该从Python的[1]th
开始? - Davidarr[:,:,::2]
我们选择元素,通过=[];
我们删除内容。这样做有点像翻转了事情。 - Divakarnumpy
中,Divakar仅选择每个奇数片,而在MATLAB中,您正在删除每个偶数片。这两个操作是等效的,但一个是选择元素,而另一个是删除元素。最好选择在数组中选择元素,而不是将它们删除。对于较大的矩阵,它所需的时间也很昂贵。 - rayryeng