这是什么样的数组切片(?)?

时间:2014-05-13 04:09:02

标签: python numpy slice

我正在查看一些代码,我看到了:

y = X[class_member_mask & core_samples_mask]

值得的是type(X)=<type 'numpy.ndarray'>len(X)=150)

什么是y?这是什么样的“切片”?是否删除或调整X的某些成员?哪个以及为什么?

1 个答案:

答案 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。 (这是xindex_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_maskcore_samples_mask是布尔数组,表示X的哪些元素满足某些条件。
class_member_mask & core_samples_mask然后创建一个数组,表示X哪些元素符合两个条件,y = X[class_member_mask & core_samples_mask]选择符合这两个条件的所有X元素。