【问题标题】:Removing every other element in NumPy删除 NumPy 中的所有其他元素
【发布时间】: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 好的,这实际上解决了所有问题。你介意解释一下为什么::21::2 的工作方式不同吗?
  • 好吧,[1::2][1]2nd 元素开始索引,但您希望从1st[0] 元素开始。因此,或者,您可以使用 arr = arr[:,:,0::2] 来表示相同的意思和效果。
  • @Divakar 实际上,我意识到我在我的 MATLAB 示例中打错了字。应该是arr(:,:,2:2:end) = [];(我不知道我是怎么搞砸的)。无论如何,您的回答似乎解决了我遇到的问题,但是如果我想匹配 MATLAB,我不应该从 Python 中的[1]th 开始吗?
  • arr[:,:,::2] 是选择元素,=[]; 是删除内容。所以,那种翻转的东西。

标签: python matlab numpy


【解决方案1】:

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

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

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

在 Python/NumPy 中,这将是:

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

或者简单地说:

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

【讨论】:

  • 啊,现在完全有道理了!感谢您花时间解释它:)
  • @David 真棒,酷!
猜你喜欢
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 2019-06-25
  • 2023-03-19
  • 2013-12-17
  • 2022-01-14
  • 2021-10-04
相关资源
最近更新 更多