基于Python中其他数组中值的条件逻辑创建数组

时间:2017-02-04 18:57:24

标签: python arrays numpy

我有一个数字范围从1到100的np数组(系列?),我有一个带有一些随机数的第二个数组。两个数组的长度相同。我想创建一个第三个数组,如果array2 [i]> array1 [i],如果array2 [i] = array1 [i]则为0,如果是array2 [i]<则为-1数组1 [i]中。

我可以轻松地使用for循环和一些"如果"陈述,但处理时间比我能负担得多。

请原谅我写出来的方式,我是python的新手并在stackoverflow中提问。非常感谢您的帮助。

array1 = [1,2,3,4,5,6,7,8,9,10]
array2 = [5,8,2,4,9,3,0,2,8,5]
array3 = [1,1,-1,0,1,-1,-1,-1,-1,-1]

4 个答案:

答案 0 :(得分:7)

这似乎是np.sign的一个很好的用例,它将正数转换为1,零变​​为0,负数变为-1:

>>> array1 = np.array([1,2,3,4,5,6,7,8,9,10])
>>> array2 = np.array([5,8,2,4,9,3,0,2,8,5])
>>> np.sign(array2-array1)
array([ 1,  1, -1,  0,  1, -1, -1, -1, -1, -1])

答案 1 :(得分:4)

import numpy as np

a = np.array([1,2,3,4,5,6,7,8,9,10])
b = np.array([5,8,2,4,9,3,0,2,8,5])

r = 1*(b > a) - (b < a) # multiplying by one converts boolean array to int array
print(r) # [ 1  1 -1  0  1 -1 -1 -1 -1 -1]

答案 2 :(得分:3)

您也可以使用面具:

array1 = [1,2,3,4,5,6,7,8,9,10]
array2 = [5,8,2,4,9,3,0,2,8,5]

result = np.zeros(10)
# use masks
result[array2>array1 ] = 1
result[array2 ==array1 ] = 0
result[array2<array1 ] = -1

print(result) # [1,1,-1,0,1,-1,-1,-1,-1,-1]

答案 3 :(得分:1)

也许有更快的方法,但一种选择是从第二个数据中减去第一个数组,然后numpy.clip差异以形成比较标准。

>>> arr1 = np.array([1, 5, -3, 2, 7])
>>> arr2 = np.array([-4, 5, 3, 0, 7])
>>> np.clip(arr2-arr1, -1, 1)
array([-1,  0,  1, -1,  0])

修改:由于np.signsee DSM's answer,无需剪辑。