我正在学习机器学习课程,并建议(关于平衡课程)使用以下字符串:
X_train_to_add = X_train[y_train.as_matrix() == 1, :][indices_to_add, :]
其中y_train
是一个pandas数据帧(通过as.matrix()
将其转换为numpy数组)。我不知道如何使用矩阵作为切片的索引。
答案 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, :]
让我们看一个具体的例子。我们假设y
,X_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])
首先,我们创建一个布尔数组,指出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索引的示例。