Python 确定两个numpy阵列不同的标记
我有两个长numpy数组,都有508个元素。我想得到它们不同之处的指数。我在这里看到的大多数解决方案都会对数组进行排序,这在我的例子中并不适用 范例Python 确定两个numpy阵列不同的标记,python,numpy,array-difference,Python,Numpy,Array Difference,我有两个长numpy数组,都有508个元素。我想得到它们不同之处的指数。我在这里看到的大多数解决方案都会对数组进行排序,这在我的例子中并不适用 范例 arr_1=[0,1,4,0,2,2,0,3,5,…,5,5,6] arr_1=[0,1,0,0,0,2,0,3,0,…,5,0,6] 希望返回类似于: solut=[0,0,1,0,1,0,0,0,1,…,0,1,0] 甚至 solut=[2,4,8,…,n-2] 在numpy中有没有一种有效的方法可以做到这一点?您只需编写arr=arr\u 1
arr_1=[0,1,4,0,2,2,0,3,5,…,5,5,6]
arr_1=[0,1,0,0,0,2,0,3,0,…,5,0,6]
希望返回类似于:
solut=[0,0,1,0,1,0,0,0,1,…,0,1,0]
甚至
solut=[2,4,8,…,n-2]
在numpy中有没有一种有效的方法可以做到这一点?您只需编写
arr=arr\u 1==arr\u 2
。这段代码为您提供了一个布尔数组,如果它们相等,则为true;如果不相等,则为false。然后,您可以使用np.where
查找数组相等或不相等的索引。我将按照以下方式使用numpy.equal
import numpy as np
arr_1 = [0, 1, 4, 0, 2, 2, 0, 3, 5, 5, 5, 6]
arr_2 = [0, 1, 0, 0, 0, 2, 0, 3, 0, 5, 0, 6]
solut = (~np.equal(arr_1, arr_2)).astype(int)
print(solut)
输出
[0 0 1 0 1 0 0 0 1 0 1 0]
[ 2 4 8 10]
说明:使用numpy.equal
获得False
s和True
s数组,其中arru 1
-arru 2
对相等,然后求反(使用~/code>),最后将布尔值转换为int
。如果您对非零索引感兴趣,请使用numpy.flatnonzero
函数:
indices = np.flatnonzero(solut)
print(indices)
输出
[0 0 1 0 1 0 0 0 1 0 1 0]
[ 2 4 8 10]
在这种情况下,在输入到numpy.flatnonzero
之前,您不需要将数组转换为int
s,还有np.flatnonzero
适用于1d数组,它是solute
的。@Kevin I updated可能会回答这个问题