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_row
和min_col
可以默认设置为0
。我该怎么设置max_col
和max_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]])
1 个回答
8
你可以直接在切片中使用 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
在 切片对象中被用作默认值。如果想了解更多关于在numpy切片中使用 None
的详细信息,可以查看 基本切片文档描述末尾的说明框。