首页 > 解决方案 > numpy 从数组中删除列中第一个元素为 0 的列

问题描述

如果我有一个随机的 numpy 数组,如下所示:

myArray:

        [0  ,        0      ,  51.78  ,      17],
        [823.    ,   91.31  ,  51.63  ,      13],
        [819.    ,   93.03  ,  51.77  ,      52],
        [776.32  ,   93.85  ,  52.02  ,      34],
        [755.12  ,   92.48  ,  49.955 ,      77],
        [739.01  ,   97.68  ,  50.75  ,      48],
        [760.17  ,   98.26  ,  51.1   ,      12],
        [780.37  ,   98.82  ,  51.52  ,      13],
        [740.34  ,   98.5   ,  50.48  ,      17],
        [768.65  ,  104.86  ,  51.71  ,      97]]

我希望删除第一个元素为 0 的列,从而生成以下数组:

myArray:

        [51.78  ,      17],
        [51.63  ,      13],
        [51.77  ,      52],
        [52.02  ,      34],
        [49.955 ,      77],
        [50.75  ,      48],
        [51.1   ,      12],
        [1.52   ,      13],
        [50.48  ,      17],
        [51.71  ,      97]]

笔记

我知道np.delete,我不确定是否可以在给定任何随机数组的情况下实现这一点。我正在寻找一种方法,如果给定一个第一行有 0 的随机数组,我可以对任何数组实现相同的函数,而不仅仅是上面给出的示例。

任何提示将非常感谢!

标签: pythonarraysnumpy

解决方案


使用布尔索引,条件是arr[0] != 0

arr[:, arr[0] != 0]

#array([[ 51.78 ,  17.   ],
#       [ 51.63 ,  13.   ],
#       [ 51.77 ,  52.   ],
#       [ 52.02 ,  34.   ],
#       [ 49.955,  77.   ],
#       [ 50.75 ,  48.   ],
#       [ 51.1  ,  12.   ],
#       [ 51.52 ,  13.   ],
#       [ 50.48 ,  17.   ],
#       [ 51.71 ,  97.   ]])

推荐阅读