numpy数组末尾的索引

4

我有一个函数,可以将一些数据加载到一个 2D 的 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]])
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]

在这里,你也可以将你的min默认值替换为None。这样做是有效的,因为None被用作切片对象中的默认值。有关在numpy切片中使用None的更明确文档,请参见Basic Slicing docs结尾处的备注框。


1
你也可以省略掉 None,直接写成 x[2:]a[min_row:, min_col:] - eickenberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接