怎么可能这样切片?

时间:2016-07-25 01:11:18

标签: python numpy

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

X_train_to_add = X_train[y_train.as_matrix() == 1, :][indices_to_add, :]

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

1 个答案:

答案 0 :(得分:0)

将语句分解为其组成部分可能会有所帮助。该语句等同于以下语句序列:

y = y_train.as_matrix()
row_mask = y == 1
X_masked = X_train[row_mask,:]
X_train_to_add = X_masked[indices_to_add, :]

让我们看一个具体的例子。我们假设yX_trainindices_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])

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

>>> row_mask = y == 1
>>> row_mask
array([ True, False, False,  True,  True], dtype=bool)

接下来,我们使用行掩码选择X_train的行,使row_mask的对应值为True(或等效地,行的对应值{ {1}}等于y)。

1

最后,我们使用索引数组来选择上一个结果中的某些行。请注意,这些索引是指>>> X_masked = X_train[row_mask,:] >>> X_masked array([[ 1, 2, 3], [10, 11, 12], [13, 14, 15]]) 的行,而不是原始矩阵X_masked

X_train

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