【问题标题】:Python: separate matrix by column valuesPython:按列值分隔矩阵
【发布时间】:2014-02-13 14:56:56
【问题描述】:

我有一个矩阵 A,它有 3 列,看起来有点像,但要大得多:

[[10 15 1.0]
 [21 13 1.0]
 [9  14 0.0]
 [14 24 1.0]
 [21 31 0.0]
 ...]

我想创建两个单独的矩阵:一个包含第三列=0.0 的所有数据,另一个包含第三列=1.0 的所有数据。所以本质上是按第三列中的值 0.0 或 1.0 拆分数据。

【问题讨论】:

    标签: python numpy matrix split


    【解决方案1】:

    如果您使用Numpy,请先找到第三列具有所需值的行,然后使用indexing 提取行。

    演示

    >>> import numpy
    >>> A = numpy.array([[1, 0, 1],
                         [2, 0, 1],
                         [3, 0, 0],
                         [4, 0, 0],
                         [5, 0, 0]])
    >>> A1 = A[A[:, 2] == 1, :] # extract all rows with the third column 1
    >>> A0 = A[A[:, 2] == 0, :] # extract all rows with the third column 0
    >>> A0
    array([[3, 0, 0],
           [4, 0, 0],
           [5, 0, 0]])
    >>> A1
    array([[1, 0, 1],
           [2, 0, 1]])
    

    【讨论】:

      【解决方案2】:
      >>> a
      array([[ 10.,  15.,   1.],
             [ 21.,  13.,   1.],
             [  9.,  14.,   0.],
             [ 14.,  24.,   1.],
             [ 21.,  31.,   0.]])
      >>> a[np.where(a[:,-1])]
      array([[ 10.,  15.,   1.],
             [ 21.,  13.,   1.],
             [ 14.,  24.,   1.]])
      >>> a[np.where(~a[:,-1].astype(bool))]
      array([[  9.,  14.,   0.],
             [ 21.,  31.,   0.]])
      

      【讨论】:

        【解决方案3】:

        以下是我们如何使用列表推导来分离矩阵,无需导入额外的库。首先,一个包含第三列所有数据的矩阵是0.0

        [x for x in matrix if x[2] == 0.0]
        

        还有另一个矩阵,其中包含与第三列为 1.0 时相关的所有数据:

        [x for x in matrix if x[2] == 1.0]
        

        例如:

        matrix = [[10, 15, 1.0],
                  [21, 13, 1.0],
                  [ 9, 14, 0.0],
                  [14, 24, 1.0],
                  [21, 31, 0.0]]
        
        [x for x in matrix if x[2] == 0.0]
        => [[ 9, 14, 0.0],
            [21, 31, 0.0]]
        
        [x for x in matrix if x[2] == 1.0]
        => [[10, 15, 1.0],
            [21, 13, 1.0],
            [14, 24, 1.0]]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-10
          • 2013-09-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多