这是什么:s [s [1:] == s [: - 1]]在numpy中做什么?

时间:2015-06-14 15:20:14

标签: python numpy

我一直在寻找一种方法来有效地检查numpy数组中的重复项,并偶然发现了一个包含使用此代码的答案的问题。

这条线在numpy中意味着什么?

s[s[1:] == s[:-1]]

想要在应用之前理解代码。查看Numpy文档,但无法找到这些信息。

4 个答案:

答案 0 :(得分:21)

切片[1:][:-1]表示除了第一个和以外的所有以外的所有元素:

>>> import numpy as np
>>> s = np.array((1, 2, 2, 3))  # four element array
>>> s[1:]
array([2, 2, 3])  # last three elements
>>> s[:-1]
array([1, 2, 2])  # first three elements

因此,比较会在每个元素s[x]与其“邻居” s[x+1]之间生成一个布尔比较数组,该数组将比原始数组短一个(作为最后一个元素没有邻居):

>>> s[1:] == s[:-1]
array([False,  True, False], dtype=bool)

并使用该数组索引原始数组,获取比较为True的元素,即与其邻居相同的元素:

>>> s[s[1:] == s[:-1]]
array([2])

请注意,这仅标识相邻的重复值。

答案 1 :(得分:6)

检查出来:

>>> s=numpy.array([1,3,5,6,7,7,8,9])
>>> s[1:] == s[:-1]
array([False, False, False, False,  True, False, False], dtype=bool)
>>> s[s[1:] == s[:-1]]
array([7])

所以s[1:]给出所有数字,但第一个,s[:-1]除了最后一个。 现在比较这两个向量,例如看看两个相邻的元素是否相同。最后,选择这些元素。

答案 2 :(得分:3)

s[1:] == s[:-1]将没有第一个元素的s与没有最后一个元素的s进行比较,即0表示1st,1st表示第二个等,给出一个len(s) - 1布尔数组元素。 s[boolarray]只会选择sTrueboolarray对应位置{{}}}的元素。因此,代码提取所有与下一个元素相等的元素。

答案 3 :(得分:3)

它将在排序数组中显示重复项。

基本上,内部表达式s[1:] == s[:-1]将数组与其移位版本进行比较。想象一下:

1, [2, 3, ... n-1, n  ]
-  [1, 2, ... n-2, n-1] n
=> [F, F, ...   F, F  ]

在排序数组中,除非重复,否则结果数组中不会有True。然后,此表达式s[array]会过滤索引Truearray的表达式。