我正在查看一些代码,我看到了:
y = X[class_member_mask & core_samples_mask]
值得的是type(X)=<type 'numpy.ndarray'>
和len(X)=150)
。
什么是y
?这是什么样的“切片”?是否删除或调整X的某些成员?哪个以及为什么?
答案 0 :(得分:2)
我们无法100%确定地从我们可以看到的代码中发现了什么,但这看起来像是NumPy advanced indexing operation。
当一个NumPy数组被索引为具有相同形状的布尔数时,如下所示:
>>> x = numpy.array([[1, 2],
... [3, 4]])
>>> index_array = numpy.array([[True, False],
... [False, True]])
>>> x[index_array]
array([1, 4])
结果是一个元素数组,对应于x
的每个位置,其中索引数组具有True
元素。元素以与它们在展平版x
中出现的顺序相同的顺序出现在结果数组中。结果不是观点;修改它不会影响x
。 (这是x
和index_array
形状不同的更一般行为的特例,但这里的形状可能相同,而且完整的行为很难理解。)
&
是bitwise and operator。对于布尔值,这与常规和运算符几乎相同。对于形状相同的NumPy布尔数组:
>>> x = numpy.array([True, False, True])
>>> y = numpy.array([True, True, False])
>>> x & y
array([ True, False, False], dtype=bool)
它通过和and
相应的元素来创建一个结果数组。 (同样,这是一个更普遍的行为的特例,但解释完整的一般性将使帖子的长度翻两番。)
将它们组合在一起,我们可以猜测class_member_mask
和core_samples_mask
是布尔数组,表示X
的哪些元素满足某些条件。
class_member_mask & core_samples_mask
然后创建一个数组,表示X
哪些元素符合两个条件,y = X[class_member_mask & core_samples_mask]
选择符合这两个条件的所有X
元素。