pythonarraysmathnumpy

What's the simplest way to extend a numpy array in 2 dimensions?


I have a 2d array that looks like this:

XX
xx

What's the most efficient way to add an extra row and column:

xxy
xxy
yyy

For bonus points, I'd like to also be able to knock out single rows and columns, so for example in the matrix below I'd like to be able to knock out all of the a's leaving only the x's - specifically I'm trying to delete the nth row and the nth column at the same time - and I want to be able to do this as quickly as possible:

xxaxx
xxaxx
aaaaa
xxaxx
xxaxx

Solution

  • The shortest in terms of lines of code i can think of is for the first question.

    >>> import numpy as np
    >>> p = np.array([[1,2],[3,4]])
    
    >>> p = np.append(p, [[5,6]], 0)
    >>> p = np.append(p, [[7],[8],[9]],1)
    
    >>> p
    array([[1, 2, 7],
       [3, 4, 8],
       [5, 6, 9]])
    

    And the for the second question

        p = np.array(range(20))
    >>> p.shape = (4,5)
    >>> p
    array([[ 0,  1,  2,  3,  4],
           [ 5,  6,  7,  8,  9],
           [10, 11, 12, 13, 14],
           [15, 16, 17, 18, 19]])
    >>> n = 2
    >>> p = np.append(p[:n],p[n+1:],0)
    >>> p = np.append(p[...,:n],p[...,n+1:],1)
    >>> p
    array([[ 0,  1,  3,  4],
           [ 5,  6,  8,  9],
           [15, 16, 18, 19]])