How do you extract a column from a multi-dimensional array?

前端 未结 20 2765
感情败类
感情败类 2020-12-02 03:56

Does anybody know how to extract a column from a multi-dimensional array in Python?

相关标签:
20条回答
  • 2020-12-02 04:18

    check it out!

    a = [[1, 2], [2, 3], [3, 4]]
    a2 = zip(*a)
    a2[0]
    

    it is the same thing as above except somehow it is neater the zip does the work but requires single arrays as arguments, the *a syntax unpacks the multidimensional array into single array arguments

    0 讨论(0)
  • 2020-12-02 04:18
    [matrix[i][column] for i in range(len(matrix))]
    
    0 讨论(0)
  • 2020-12-02 04:18
    array = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
    
    col1 = [val[1] for val in array]
    col2 = [val[2] for val in array]
    col3 = [val[3] for val in array]
    col4 = [val[4] for val in array]
    print(col1)
    print(col2)
    print(col3)
    print(col4)
    
    Output:
    [1, 5, 9, 13]
    [2, 6, 10, 14]
    [3, 7, 11, 15]
    [4, 8, 12, 16]
    
    0 讨论(0)
  • 2020-12-02 04:19

    All columns from a matrix into a new list:

    N = len(matrix) 
    column_list = [ [matrix[row][column] for row in range(N)] for column in range(N) ]
    
    0 讨论(0)
  • 2020-12-02 04:20
    >>> x = arange(20).reshape(4,5)
    >>> x array([[ 0,  1,  2,  3,  4],
            [ 5,  6,  7,  8,  9],
            [10, 11, 12, 13, 14],
            [15, 16, 17, 18, 19]])
    

    if you want the second column you can use

    >>> x[:, 1]
    array([ 1,  6, 11, 16])
    
    0 讨论(0)
  • 2020-12-02 04:20

    Well a 'bit' late ...

    In case performance matters and your data is shaped rectangular, you might also store it in one dimension and access the columns by regular slicing e.g. ...

    A = [[1,2,3,4],[5,6,7,8]]     #< assume this 4x2-matrix
    B = reduce( operator.add, A ) #< get it one-dimensional
    
    def column1d( matrix, dimX, colIdx ):
      return matrix[colIdx::dimX]
    
    def row1d( matrix, dimX, rowIdx ):
      return matrix[rowIdx:rowIdx+dimX] 
    
    >>> column1d( B, 4, 1 )
    [2, 6]
    >>> row1d( B, 4, 1 )
    [2, 3, 4, 5]
    

    The neat thing is this is really fast. However, negative indexes don't work here! So you can't access the last column or row by index -1.

    If you need negative indexing you can tune the accessor-functions a bit, e.g.

    def column1d( matrix, dimX, colIdx ):
      return matrix[colIdx % dimX::dimX]
    
    def row1d( matrix, dimX, dimY, rowIdx ):
      rowIdx = (rowIdx % dimY) * dimX
      return matrix[rowIdx:rowIdx+dimX]
    
    0 讨论(0)
提交回复
热议问题