【问题标题】:How to select specific columns in numpy array?如何选择numpy数组中的特定列?
【发布时间】:2023-03-29 15:06:02
【问题描述】:

假设我有 20x100 的 numpy 数组。我想选择除第 50 列之外的所有列。 所以我关注了这个帖子Extracting specific columns in numpy array 但这没有帮助。我尝试使用

 x=Z[:,[:49,51:]] 

但出现错误。在 R 中很容易做到这一点

x=Z[,c(1:49,51:100)] 

但在 Python 中无法弄清楚。 请帮忙。谢谢

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    在这里获得类似 R 的语法的一种方法是使用 np.r_:

    >>> Z = np.arange(2000).reshape(20, 100)
    >>> Z.shape
    (20, 100)
    >>> x = Z[:,np.r_[:49,50:100]]
    >>> x.shape
    (20, 99)
    >>> x[0,48:52]
    array([48, 50, 51, 52])
    

    我们看到x 中缺少第 50 列(编号为 49)。

    【讨论】:

    • 酷!以前没见过。 希望我以前见过!非常numpythonic。
    【解决方案2】:

    这可行:

    >>> a = np.arange(2000).reshape(20, 100)
    >>> b = a[:, np.arange(a.shape[1]) != 50]
    >>> b.shape
    (20, 99)
    

    【讨论】:

      【解决方案3】:

      您可以使用 np.delete() 简单地删除第 50 列:

      A = np.delete(A, 50, 1)
      

      演示:

      >>> import numpy as np
      >>> A = np.arange(100).reshape(25,4)
      >>> A
      array([[ 0,  1,  2,  3],
             [ 4,  5,  6,  7],
             [ 8,  9, 10, 11],
             [12, 13, 14, 15],
             [16, 17, 18, 19],
             [20, 21, 22, 23],
             [24, 25, 26, 27],
             [28, 29, 30, 31],
             [32, 33, 34, 35],
             [36, 37, 38, 39],
             [40, 41, 42, 43],
             [44, 45, 46, 47],
             [48, 49, 50, 51],
             [52, 53, 54, 55],
             [56, 57, 58, 59],
             [60, 61, 62, 63],
             [64, 65, 66, 67],
             [68, 69, 70, 71],
             [72, 73, 74, 75],
             [76, 77, 78, 79],
             [80, 81, 82, 83],
             [84, 85, 86, 87],
             [88, 89, 90, 91],
             [92, 93, 94, 95],
             [96, 97, 98, 99]])
      >>> 
      >>> A = np.delete(A, 2, 1)
      >>> A
      array([[ 0,  1,  3],
             [ 4,  5,  7],
             [ 8,  9, 11],
             [12, 13, 15],
             [16, 17, 19],
             [20, 21, 23],
             [24, 25, 27],
             [28, 29, 31],
             [32, 33, 35],
             [36, 37, 39],
             [40, 41, 43],
             [44, 45, 47],
             [48, 49, 51],
             [52, 53, 55],
             [56, 57, 59],
             [60, 61, 63],
             [64, 65, 67],
             [68, 69, 71],
             [72, 73, 75],
             [76, 77, 79],
             [80, 81, 83],
             [84, 85, 87],
             [88, 89, 91],
             [92, 93, 95],
             [96, 97, 99]])
      

      【讨论】:

        【解决方案4】:

        或者,您可以使用iloc

        import numpy as np
        import pandas as pd
        data = np.random.normal(size=2000).reshape(20, 100)
        df = pd.DataFrame(data, columns=list(range(1,101)))
        df.iloc[:,list(range(49)) + list(range(50, 100))]
        

        【讨论】:

          猜你喜欢
          • 2014-05-20
          • 1970-01-01
          • 2019-11-01
          • 2017-11-06
          • 1970-01-01
          • 1970-01-01
          • 2016-07-21
          • 2020-02-12
          相关资源
          最近更新 更多