2014-10-30 148 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_col可能默認爲0。如何將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代替你分鐘默認了。這是可行的,因爲None被用作slice object中的默認值。有關在numpy切片中使用None的更多明確文檔,請參閱Basic Slicing docs description末尾的註釋框。

+1

你也可以省略'None'到'x [2:]'和'a [min_row:,min_col:]' – eickenberg 2014-10-30 21:27:49