Python 这样切一片怎么可能?
我正在学习一门机器学习课程,有一个建议(关于平衡类)使用以下代码:Python 这样切一片怎么可能?,python,numpy,Python,Numpy,我正在学习一门机器学习课程,有一个建议(关于平衡类)使用以下代码: X_train_to_add = X_train[y_train.as_matrix() == 1, :][indices_to_add, :] 其中y\u train是一个数据帧(通过as.matrix()将其转换为numpy数组)。我不明白如何使用矩阵作为切片索引。将语句分解为其组成部分可能会有所帮助。此语句相当于以下语句序列: y = y_train.as_matrix() row_mask = y == 1 X_mas
X_train_to_add = X_train[y_train.as_matrix() == 1, :][indices_to_add, :]
其中
y\u train
是一个数据帧(通过as.matrix()
将其转换为numpy数组)。我不明白如何使用矩阵作为切片索引。将语句分解为其组成部分可能会有所帮助。此语句相当于以下语句序列:
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\u列车
,以及索引_至_添加
具有以下值:
>>> 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
,我们称之为“行掩码”
接下来,我们使用行掩码来选择X\u列的行
,使得row\u掩码
的对应值为True
(或者等效地,使得y
的对应值等于1
)的行
最后,我们使用一个索引数组从前面的结果中选择某些行。请注意,这些索引指的是被屏蔽的X\u行
,而不是原始矩阵X\u列
>>> X_train_to_add = X_masked[indices_to_add,:]
>>> X_train_to_add
array([[13, 14, 15],
[ 1, 2, 3]])
您可以在.中看到更多的numpy索引示例,称为。从SO文档中可以看出:这不是字符串。这是代码,或者您指的是语法。字符串是一种数据类型,如“这里有一些文本”
。在询问编程时,不要将其与其他含义一起使用。
>>> X_masked = X_train[row_mask,:]
>>> X_masked
array([[ 1, 2, 3],
[10, 11, 12],
[13, 14, 15]])
>>> X_train_to_add = X_masked[indices_to_add,:]
>>> X_train_to_add
array([[13, 14, 15],
[ 1, 2, 3]])