比较两个以上的numpy数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比较两个以上的numpy数组相关的知识,希望对你有一定的参考价值。
我想要一个布尔numpy数组fixidx
,这是比较numpy数组a
,b
,c
和d
的结果。例如,我有阵列
a = np.array([1, 1])
b = np.array([1, 2])
c = np.array([1, 3])
d = np.array([1, 4])
所以数组fixidx
有值
fixidx = [1,0]
我的方法是
fixidx = (a == b) & (b == c) & (c == d)
这在Matlab中有效,但事实证明Python只会产生一个ValueError。
ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()
any
或all
不会这样做,或者至少我无法理解。
答案
代码完美无误。尝试将布尔输出转换为整数:
((a == b) & (b == c) & (c == d)).astype(int)
array([1, 0])
另一答案
让我们首先将a
,b
,c
和d
堆叠成一个单一的数组x
:
In [452]: x = np.stack([a, b, c, d])
In [453]: x
Out[453]:
array([[1, 1],
[1, 2],
[1, 3],
[1, 4]])
然后,您可以将NumPy的unique应用于每个列,并测试结果是否包含一个或多个元素。
In [454]: fixidx = np.array([np.unique(x[:, i]).size == 1 for i in range(x.shape[1])])
In [455]: fixidx
Out[455]: array([ True, False])
最后,如果需要,您可以将fixidx
转换为整数:
In [456]: fixidx.astype(int)
Out[456]: array([1, 0])
或者,您可以通过NumPy的equal获得相同的结果,如下所示:
fixidx = np.ones(shape=a.shape, dtype=int)
x = [a, b, c, d]
for first, second in zip(x[:-1], x[1:]):
fixidx *= np.equal(first, second)
以上是关于比较两个以上的numpy数组的主要内容,如果未能解决你的问题,请参考以下文章