怎么可能这样切片?

bas*_*tak 5 python numpy

我正在学习机器学习课程,并建议(关于平衡课程)使用以下字符串:

X_train_to_add = X_train[y_train.as_matrix() == 1, :][indices_to_add, :]
Run Code Online (Sandbox Code Playgroud)

其中y_train是pandas数据帧(通过它转换为numpy数组as.matrix()).我不知道如何使用矩阵作为切片的索引.

aug*_*rar 1

将陈述分解为各个组成部分可能会有所帮助。该语句等价于以下语句序列:

y = y_train.as_matrix()
row_mask = y == 1
X_masked = X_train[row_mask,:]
X_train_to_add = X_masked[indices_to_add, :]
Run Code Online (Sandbox Code Playgroud)

让我们看一个具体的例子。假设yX_train、 和indices_to_add具有以下值:

>>> import numpy as np
>>> y = np.array([1, 2, -1, 1, 1])
>>> X_train = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]])
>>> indices_to_add = np.array([2, 0])
Run Code Online (Sandbox Code Playgroud)

首先,我们创建一个布尔数组,指示 的哪些元素y等于1,我们将其称为“行掩码”。

>>> row_mask = y == 1
>>> row_mask
array([ True, False, False,  True,  True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

接下来,我们使用行掩码来选择 的行,X_train使得 的对应值 为row_maskTrue或者等效地,选择 的对应值y等于 的行1)。

>>> X_masked = X_train[row_mask,:]
>>> X_masked
array([[ 1,  2,  3],
       [10, 11, 12],
       [13, 14, 15]])
Run Code Online (Sandbox Code Playgroud)

最后,我们使用索引数组从先前的结果中选择某些行。请注意,这些索引指的是 的行X_masked,而不是原始矩阵X_train

>>> X_train_to_add = X_masked[indices_to_add,:]
>>> X_train_to_add
array([[13, 14, 15],
       [ 1,  2,  3]])
Run Code Online (Sandbox Code Playgroud)

您可以在文档中看到更多 numpy 索引的示例。