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]])