我有一个数字范围从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]
答案 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.sign
,see DSM's answer,无需剪辑。