这段代码中的Numpy切片表示法是什么?

kcugc4gi  于 2023-02-08  发布在  其他
关注(0)|答案(2)|浏览(135)
# split into inputs and outputs

X, y = data[:, :-1], data[:, -1]

print(X.shape, y.shape)

有人能解释一下第二行代码的具体文档吗?我知道它的切片,但我找不到任何参考符号“:-1”的任何地方。请给予具体的文档部分。
谢谢
这将导致切片,最有可能使用numpy,并且它是在形状为(610, 14)的数据上完成的

vqlkdk9b

vqlkdk9b1#

此切片表示法在www.example.com中进行了解释https://docs.python.org/3/tutorial/introduction.html#strings
-1表示最后一个元素,-2表示倒数第二个元素,等等。例如,如果列表中有8个元素,则-1等于7(不是8,因为索引从0开始)
请记住,python对嵌套列表的“普通”切片看起来像[1:3][5:7],而numpy数组也有一个稍微不同的语法([8:10, 12:14]),它允许您对多维数组进行切片。然而,-1总是表示相同的意思。

mrphzbgm

mrphzbgm2#

根据文件:
∮ ∮ ∮
ndarrays可以使用标准的Python x[obj]语法进行索引,其中 * x * 是 * 数组 obj * 是选择。根据 * obj * 的不同,有不同类型的索引可用:基本索引、高级索引和字段访问。

一维阵列

对一维数组进行切片与对列表进行切片非常相似

import numpy as np

np.random.seed(0)
array_1d = np.random.random((5,))

print(len(array_1d.shape))
    • 注意:**数组 * shape * 的len告诉您维数。

我们可以在1D数组上使用标准的python列表切片。
一个一个一个一个一个x一个一个二个一个x一个一个三个一个x一个一个x一个四个一个

二维阵列

array_2d = np.random.random((5, 1))

print(len(array_2d.shape))
2

把二维数组想象成一个数据框,它有行(第0个轴)和列(第1个轴)。numpy使我们能够通过用逗号分隔这些轴(,)来独立地切片这些轴。
一个一个七个一个一个一个八个一个一个一个一个九个一个一个一个一个一个一个一个十个一个一个一个

你的榜样

# split into inputs and outputs

X, y = data[:, :-1], data[:, -1]

print(X.shape, y.shape)

注意,data.shape>= 2(否则您将得到IndexError)。
这意味着data[:, :-1]保留所有的"行",并切片到最后一个"列",但不包括最后一个"列"。同样,data[:, -1]保留所有的"行",并 * 仅 * 选择最后一个"列"。
当你使用冒号(:)对ndarray进行切片时,你会得到一个相同维度的数组,这一点很重要。

print(len(array_2d[1:, :-1].shape))  # 2

但是如果你"选择"了一个特定的索引(也就是说,不要使用冒号),你就可以减少维数。

print(len(array_2d[1, :-1].shape))  # 1, because I selected a single index value on the 0th axis

print(len(array_2d[1, -1].shape))  # 0, because I selected a single index value on both the 0th and 1st axes

但是,您可以在任一轴上选择 * list个索引 *(假设它们存在)。

print(len(array_2d[[1], [-1]].shape))  # 1

print(len(array_2d[[1, 3], :].shape))  # 2

相关问题