numpy数组末尾的索引

4 投票
1 回答
11539 浏览
提问于 2025-04-30 16:18

我有一个函数,它可以把一些数据加载到一个二维的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]

在这里,你也可以把最小值的默认设置换成 None。这样做是可行的,因为 None切片对象中被用作默认值。如果想了解更多关于在numpy切片中使用 None 的详细信息,可以查看 基本切片文档描述末尾的说明框。

撰写回答