Python creating a smaller sub-array from a larger 2D NumPy array?

10,936

Solution 1

This will do the trick, it scales horizontally and vertically and it's easy and works.

subArray = []
newRow = []
for row in data:
    for i in xrange(0,len(row)):
        if (i % 3 == 0):
            continue
        newRow.append(row[i])
    subArray.append(newRow)
    newRow = []

Solution 2

You could do this:

>>> data[:, [1, 2, 4, 5, 7, 8]]
array([[  4.   ,  15.717,   5.   ,  17.308,   6.   ,  13.965],
       [  4.   ,  15.768,   5.   ,  17.347,   6.   ,  14.001],
       [  4.   ,  15.824,   5.   ,  17.383,   6.   ,  14.055]])
Share:
10,936
sTr8_Struggin
Author by

sTr8_Struggin

Updated on June 11, 2022

Comments

  • sTr8_Struggin
    sTr8_Struggin almost 2 years

    So I have a large NumPy array that takes the following form:

    data = [[2456447.64798471, 4, 15.717, 0.007, 5, 17.308, 0.019, 6, 13.965, 0.006],
            [2456447.6482855, 4, 15.768, 0.018, 5, 17.347, 0.024, 6, 14.001, 0.023],
            [2456447.648575, 4, 15.824, 0.02, 5, 17.383, 0.024, 6, 14.055, 0.023]]
    

    I want to create a sub array that looks like this:

    [[4, 15.717, 5, 17.308, 6, 13.965], 
     [4, 15.768, 5, 17.347, 6, 14.001],
     [4, 15.824, 5, 17.383, 6, 14.055]]
    

    Basically I want to select out the first column, and then starting at the 4th column I want to select out every 3rd column. I tried to figure this out how to approach this with something like data[1:6:?] but I didn't understand how to step through and only get the columns that I wanted.

    Also I need this to be scalable for an array that extends horizontally. So I don't just want to hard code the column values.