删除NumPy

时间:2015-07-13 14:49:02

标签: python matlab numpy

我无法为我的生活弄清楚这一点。

我正在尝试删除数组第二轴中的所有其他元素。我在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

我希望我不会忽略一些基本的东西。

1 个答案:

答案 0 :(得分:4)

您正尝试从最后一个轴的第二个元素开始删除所有其他元素。换句话说,您试图保持每个其他元素从该轴的第一个元素开始。

因此,使用其他方式选择元素而不是删除元素,MATLAB代码arr(:,:,2:2:end) = []将等同于(忽略性能数字):

arr = arr(:,:,1:2:end)

在Python / NumPy中,这将是:

arr = arr[:,:,0::2]

或者简单地说:

arr = arr[:,:,::2]