2014-10-30 11 views
2

일부 데이터를 2D numpy 배열에로드하는 함수가 있습니다. 함수 호출이 시작과 끝에서 제거 할 수있는 행과 열을 지정하도록하고 싶습니다. 매개 변수를 지정하지 않으면 모든 데이터가 반환됩니다.numpy 배열 끝의 인덱스

import numpy as np 
function load_data(min_row, max_row, min_col, max_col): 
    a = np.loadtxt('/path/to/mydata.txt')[min_row:max_row,min_col:max_col] 

이제 min_rowmin_col0 기본값 수 있습니다. max_colmax_row의 기본값을 배열의 끝으로 어떻게 설정합니까?

내 유일한 솔루션입니다 :

function load_data(min_row=0, max_row=None, min_col=0, max_col=None): 
    a = np.loadtxt('/path/to/mydata.txt') 
    if not max_row: max_row = a.shape[0] 
    if not max_col: max_col = a.shape[1] 
    a = a[min_row:max_row,min_col:max_col] 

더 나은 솔루션과 같은 것이 있습니다 : 공식적으로

function load_data(min_row=0, max_row="end", min_col=0, max_col="end"): 
    a = np.loadtxt('/path/to/mydata.txt')[min_row:max_row,min_col:max_col] 

는, 예를 들어 데이터가 될 수있다 :

np.array([[1, 2, 3, 4, 5], 
      [1, 2, 3, 4, 5], 
      [1, 2, 3, 4, 5], 
      [1, 2, 3, 4, 5], 
      [1, 2, 3, 4, 5]]) 

답변

3

당신이 할 수있는 슬라이스에서 직접 None을 사용하십시오 (예 :

).
x = np.arange(10) 
x[2:None] # array([5, 6, 7, 8, 9]) 

또는 당신은 당신의 기능처럼 쓸 수 있습니다 : 여기

function load_data(min_row=0, max_row=None, min_col=0, max_col=None): 
    a = np.loadtxt('/path/to/mydata.txt') 
    a = a[min_row:max_row,min_col:max_col] 

, 당신은 또한 너무 None 당신에게 분 기본값을 대체 할 수있다. 이 작업은 slice object의 기본값으로 None이 사용 되었기 때문에 효과가 있습니다. numpy 슬라이싱에서 None을 사용하는 데 대한 더 명백한 문서는 Basic Slicing docs description 끝에있는 메모 상자를 참조하십시오.

+1

'x [2 :]'와'a [min_row :, min_col :]'로 이어지는'None'을 생략 할 수도 있습니다. – eickenberg