2013-06-28 22 views
6

więc mam dużą tablicę NumPy że przyjmuje następującą postać:Python tworzy mniejszą pod-tablicę z większej tablicy 2D NumPy?

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]] 

Chcę utworzyć macierz sub, który wygląda tak:

[[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]] 

Zasadniczo chcę, aby wybrać się na pierwszą kolumnę , a następnie począwszy od czwartej kolumny chcę wybrać co 3 kolumnę. Próbowałem dowiedzieć się, jak się do tego podejść z czymś takim, jak data[1:6:?], ale nie rozumiem, jak przejść i uzyskać jedynie kolumny, które chciałem.

Potrzebuję tego również do skalowania w przypadku macierzy rozciągającej się poziomo. Więc nie chcę po prostu sztywno kodować wartości kolumn.

Odpowiedz

3

To zrobi sztuczkę, skaluje się poziomo i pionowo i jest łatwe i działa.

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 = [] 
+1

jeśli trzeba to być skalowalne i nie statycznie wielkości pozwól knkow i mogę zmienić kod – Stephan

+0

Tak starałem się zrobić coś skalowalne, ponieważ mój rzeczywisty tablica danych jest znacznie dłuższa zarówno w poziomie, jak iw pionie. Jeśli masz skalowalne rozwiązanie, które byłoby niesamowite! –

+1

@ sTr8_Struggin ZROBIŁ! – Stephan

7

Można to zrobić:

>>> 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]]) 
+0

co tu się dzieje, wycinanie notacji z listą? i dlaczego po okrężnicy jest przecinek? – Stephan

+0

@Stephan, ponieważ 'data' jest tablicą NumPy, można uzyskać do niej dostęp za pomocą indeksowania liczb całkowitych. Lista może być również inną tablicą. [Dokumenty do tego są tutaj] (http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#integer). Przecinek oddziela cięcie wzdłuż osi. Tak więc 'data [1: 2,:]' wybrałby pierwszy wiersz i wszystkie kolumny, podczas gdy 'data [:, 1: 2] 'wybrałby wszystkie wiersze i pierwszą kolumnę. –

+0

jesteś pewien, że 'data [1: 2]' nie dostaje drugiego przedmiotu? Myślałem, że plaster został zindeksowany 0, więc 'data [0: 1]' otrzyma pierwszy element – Stephan

Powiązane problemy