5
我正在机器学习课程,并有一个建议(约制作类平衡)使用以下字符串:怎么可能用这种方式来分片?
X_train_to_add = X_train[y_train.as_matrix() == 1, :][indices_to_add, :]
其中y_train
是大熊猫数据框(其转化那里的numpy array via as.matrix()
)。我不明白如何使用矩阵作为切片的索引。
我正在机器学习课程,并有一个建议(约制作类平衡)使用以下字符串:怎么可能用这种方式来分片?
X_train_to_add = X_train[y_train.as_matrix() == 1, :][indices_to_add, :]
其中y_train
是大熊猫数据框(其转化那里的numpy array via as.matrix()
)。我不明白如何使用矩阵作为切片的索引。
这可能有助于将声明分解为其组成部分。本声明相当于以下语句顺序:
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
(或等价地,行使得y
的对应值等于1
)。
>>> X_masked = X_train[row_mask,:]
>>> X_masked
array([[ 1, 2, 3],
[10, 11, 12],
[13, 14, 15]])
最后,我们使用一个索引数组来选择前一个结果中的某些行。请注意,这些索引是指X_masked
的行,而不是原始矩阵X_train
。
>>> X_train_to_add = X_masked[indices_to_add,:]
>>> X_train_to_add
array([[13, 14, 15],
[ 1, 2, 3]])
你可以看到在documentation numpy的索引的一些例子。
这就是所谓的[布尔索引](http://docs.scipy.org/doc/numpy/user/basics.indexing.html#boolean-or-mask-index-arrays)。 – ayhan
从SO文档:http://stackoverflow.com/documentation/numpy/1296/the-basics/6738/boolean-indexing#t=201607250121018073291 – ayhan
这不是*字符串*。这是*代码*,或者你指的是*语法*。一个字符串是一种类似于“”的数据,这里是一些文本“。在询问编程时,不要与其他含义一起使用。 – Bakuriu