Python数组: Take two and skip two

标签 python arrays numpy slice

我有一个例子,我有如下输入数组

array([[[ 1.,  0.,  2.,  0.,  3.,  0.,  4.,  0.,  5.],
        [ 6.,  0.,  7.,  0.,  8.,  0.,  9.,  0., 10.],
        [11.,  0., 12.,  0., 13.,  0., 14.,  0., 15.]],

       [[16.,  0., 17.,  0., 18.,  0., 19.,  0., 20.],
        [21.,  0., 22.,  0., 23.,  0., 24.,  0., 25.],
        [26.,  0., 27.,  0., 28.,  0., 29.,  0., 30.]]])

我想得到如下所示的输出。

array([[[ 1.,  0.,  3.,   0.,  5.],
        [ 6.,  0.,  8.,   0., 10.],
        [11.,  0., 13.,   0., 15.]],

       [[16.,  0., 18.,   0., 20.],
        [21.,  0., 23.,   0., 25.],
        [26., 0., 28.,    0., 30.]]])

如果解决方案能够通用而不仅仅是这个示例,我会很高兴。

最佳答案

由于不能保证最后一个维度的长度是偶数,这里我选择构建bool索引:

>>> mask = np.arange(ar.shape[-1]) // 2 % 2 == 0   # np.arange() & 2 == 0 is faster
>>> mask
array([ True,  True, False, False,  True,  True, False, False,  True])
>>> ar[:, :, mask]  # or ar[..., mask]
array([[[ 1.,  0.,  3.,  0.,  5.],
        [ 6.,  0.,  8.,  0., 10.],
        [11.,  0., 13.,  0., 15.]],

       [[16.,  0., 18.,  0., 20.],
        [21.,  0., 23.,  0., 25.],
        [26.,  0., 28.,  0., 30.]]])

如果可以保证最后一个维度的长度均匀,则使用切片 reshape 是另一种技术:

>>> ar
array([[[ 1.,  0.,  2.,  0.,  3.,  0.,  4.,  0.],
        [ 6.,  0.,  7.,  0.,  8.,  0.,  9.,  0.],
        [11.,  0., 12.,  0., 13.,  0., 14.,  0.]],

       [[16.,  0., 17.,  0., 18.,  0., 19.,  0.],
        [21.,  0., 22.,  0., 23.,  0., 24.,  0.],
        [26.,  0., 27.,  0., 28.,  0., 29.,  0.]]])
>>> shape = ar.shape[:-1]
>>> ar.reshape(*shape, -1, 2)[..., ::2, :].reshape(*shape, -1)
array([[[ 1.,  0.,  3.,  0.],
        [ 6.,  0.,  8.,  0.],
        [11.,  0., 13.,  0.]],

       [[16.,  0., 18.,  0.],
        [21.,  0., 23.,  0.],
        [26.,  0., 28.,  0.]]])

关于Python数组: Take two and skip two,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73951659/

相关文章:

python - 将列表中的每个元素与所有其他元素进行比较

c - 如何在C中读取数字到字符串直到行尾

c - 添加带有指向数组指针的记录

python - f2py 回调上的段错误

python - 尝试使用 pandas 读取 csv 时遇到问题?

Python Mechanize 等待和点击

python VTK上下文菜单不在鼠标位置

Java编译优化和性能

Python - 如何为我的散点图制作动画?

python - IRR 库仅适用于支付期和复利期以年为单位的情况(工程经济)