Python 使用Numpy数组条件检查是否存在值为+;当前值的1

Python 使用Numpy数组条件检查是否存在值为+;当前值的1,python,loops,numpy,vectorization,Python,Loops,Numpy,Vectorization,我想将类似这样的if语句构建成numpy条件(对于argwhere或类似的条件) 这是可能的还是通过数组循环是唯一的方法?您可以使用np.roll函数移动数组 import numpy as np array+1 == np.roll(array, shift=-1) 这将返回一个布尔值数组。您可以使用移动数组的np.roll函数 import numpy as np array+1 == np.roll(array, shift=-1) 这将返回一个布尔值数组。您也可以使用np.equal

我想将类似这样的if语句构建成numpy条件(对于argwhere或类似的条件)


这是可能的还是通过数组循环是唯一的方法?

您可以使用
np.roll
函数移动数组

import numpy as np
array+1 == np.roll(array, shift=-1)

这将返回一个布尔值数组。

您可以使用移动数组的
np.roll
函数

import numpy as np
array+1 == np.roll(array, shift=-1)
这将返回一个布尔值数组。

您也可以使用
np.equal()
函数

import numpy as np

a = [1,2,4,8,12,13]
x = np.array(a)
res = np.equal((x+1)[:-1], x[1:])

print(res)
Out:

[ True False False False  True]
注意:

[ True False False False  True]
如果您需要速度,通常情况下,当我们使用numpy时,值得一提的是,此方法比
np.roll()
更快,FBruzzesi在下面提出了这一点,这也是一个优雅的解决方案:

import timeit

code1 = """
import numpy as np
a = [1,2,4,8,12,13]
x = np.array(a)
np.equal((x+1)[:-1], x[1:])
"""
elapsed_time1 = timeit.timeit(code1, number=10000)/100
print(elapsed_time1)

code2 = """
import numpy as np
a = [1,2,4,8,12,13]
x = np.array(a)
x+1 == np.roll(x, shift=-1)
"""

elapsed_time2 = timeit.timeit(code2, number=10000)/100
print(elapsed_time2)
Out:

0.00044608700000026147
0.0022752689999970244
您也可以使用
np.equal()
函数

import numpy as np

a = [1,2,4,8,12,13]
x = np.array(a)
res = np.equal((x+1)[:-1], x[1:])

print(res)
Out:

[ True False False False  True]
注意:

[ True False False False  True]
如果您需要速度,通常情况下,当我们使用numpy时,值得一提的是,此方法比
np.roll()
更快,FBruzzesi在下面提出了这一点,这也是一个优雅的解决方案:

import timeit

code1 = """
import numpy as np
a = [1,2,4,8,12,13]
x = np.array(a)
np.equal((x+1)[:-1], x[1:])
"""
elapsed_time1 = timeit.timeit(code1, number=10000)/100
print(elapsed_time1)

code2 = """
import numpy as np
a = [1,2,4,8,12,13]
x = np.array(a)
x+1 == np.roll(x, shift=-1)
"""

elapsed_time2 = timeit.timeit(code2, number=10000)/100
print(elapsed_time2)
Out:

0.00044608700000026147
0.0022752689999970244

你的意思是
shift=-1
np.roll([1,2,3,4,4],shift=1)是数组([4,1,2,3])。所以你应该知道最后一个元素和第一个元素相比。非常感谢,我认为这是正确的answer@Aryerez请参阅我的手册中下面的速度注意事项answer@Geeocode我已经改变了我的答案,因为就像你说的那样,这是一种更快的方法,你还包括了一个比较。但我要求你加入对FBruzzesi的引用,因为你是在比较他的答案。你的意思是
shift=-1
np。roll([1,2,3,4,],shift=1)是数组([4,1,2,3])。所以你应该知道最后一个元素和第一个元素相比。非常感谢,我认为这是正确的answer@Aryerez请参阅我的手册中下面的速度注意事项answer@Geeocode我已经改变了我的答案,因为就像你说的那样,这是一种更快的方法,你还包括了一个比较。但我要求你在我的回答中加入对FBruzzesi的引用,因为你是在与他的回答进行比较。请参见我的回答中下面的速度考虑参见我的回答中下面的速度考虑