在Datacamp

时间:2017-06-04 20:17:38

标签: python numpy

刚开始用Datacamp学习python,我遇到了关于Numpy的问题。在做this problem时(这是一个独立的问题所以应该很容易理解,没有任何上下文),我对指令感到困惑:“你可以在这里使用一个小技巧:使用np_positions =='GK'作为索引np_heights”。

代码中没有任何地方将np_heights和np_positions链接在一起,该索引如何工作?起初我以为我必须垂直连接这两个,但事实证明它没有必要。

是不是因为只有两个Numpy数组而且它们具有相同数量的元素,Python决定自动配对它们?如果我有多个Numpy数组具有相同数量的元素并使用该索引,那会是一个问题吗?

1 个答案:

答案 0 :(得分:1)

他们唯一的共同点是他们的长度。除此之外,它们没有联系在一起。使用boolean indexing时,长度会发挥作用。

考虑以下数组:

arr = np.array([1, 2, 3])

使用布尔值,我们可以索引到这个数组:

arr[[True, False, True]]
Out: array([1, 3])

这在0和2位返回值(它们有True个值)。

这个布尔数组可能来自任何地方。它可能来自相同的数组,也可能来自相同长度的不同数组。

arr1 = np.array(['a', 'b', 'a', 'c'])

如果我arr1 == 'a',它将进行元素比较并返回

arr1 == 'a'
Out: array([ True, False,  True, False], dtype=bool)

我可以在同一个数组中使用它:

arr1[arr1=='a']
Out: 
array(['a', 'a'], 
      dtype='<U1')

或者在不同的数组中:

arr2 = np.array([2, 5, 1, 7])

arr2[arr1=='a']
Out: array([2, 1])

请注意,这与arr2[[True, False, True, False]]没有什么不同。所以我们实际上并没有在这里使用arr1。在您的示例中,np_positions == 'GK'也将返回一个布尔数组。由于它与np_height数组具有相同的大小,因此您只需处理布尔数组具有True值的位置。