我有一组3个阵列,我会相互比较。 数组a包含一组值,数组b和c的值应该部分相同。
如果说a[0] == b[0]
而不是c[0]
总是错误的值
为了更好的解释,我试着表明我的意思。
import numpy as np
a = np.array([2, 2, 3, 4])
b = np.array([1, 3, 3, 4])
c = np.array([2, 2, 4, 3])
print(a == b)
# return: [False False True True]
print(a == c)
# return: [True True False False]
你可以看到两组中我有两个真和两个假。所以如果其中一个是真的那么总数应该是真的。当我执行以下操作时,我得到一个数组的True / False。而答案就是我想要的......
print((a == b).all())
# return: False
print((a == c).all())
# return: False
print(a.all() == (b.all() or c.all()))
# return: True
当我制作数组b和c以便我有一个vallue时,在两种情况下都是错的,我应该以一个错误结束
import numpy as np
a = np.array([2, 2, 3, 4])
b = np.array([1, 3, 3, 4])
c = np.array([5, 2, 4, 3])
print(a == b)
# return: [False False True True]
print(a == c)
# return: [False True False False]
print((a == b).all())
# return: False
print((a == c).all())
# return: False
到目前为止很好
print(a.all() == (b.all() or c.all()))
# return: True
这部分不好这个应该是假的!!
我如何得到这样的函数或者这样的函数,以便在a
中b
或c
中存在相同的值时,以{1}}或<{p>
编辑:
关于a[0] == b[0]
的解释比c[0]
:
我有一个python函数,其中阶段信息进入并且必须执行一些操作。
在此之前我想检查我是否需要处理一组虚数值或带有相位角的数组。我想在做某事之前检查一下。问题是相位角,因为右侧是反相+/- pi。所以对于每个价值我有两个选择。并且大多数时候它是独家的,但在+/- pi / 2的情况下,它不是因为两者都是真的而且也很好......
答案 0 :(得分:2)
您想要一个合乎逻辑的OR
:
np.logical_or(a==b, a==c).all()
答案 1 :(得分:1)
根据你的例子和解释,我想你想要的是:
对于每个职位,完全
b
或c
中的一个与a
具有相同的价值
如果是这种情况,可以使用以下代码完成:
def is_exclusively_jointly_same(a, b, c):
return np.logical_xor(a==b, a==c).all() # or use ^ below
# return ((a==b)^(a==c)).all()
^
是独占或(XOR)运算符,当且仅当其参数中的一个为True
时才会返回True
。
所以表达式(a==b)^(a==c)
表示a==b
或a==c
,但不是两者。然后.all()
检查数组中的所有位置是否为真。
示例:
>>> a=np.array([1,2,3,4,5]) >>> b=np.array([1,2,0,0,5]) >>> c=np.array([0,0,3,4,0]) >>> is_exclusively_jointly_same(a, b, c) True >>> a=np.array([1,2,3,4,5]) >>> b=np.array([0,2,0,0,5]) # First value both not 1 >>> c=np.array([0,0,3,4,0]) >>> is_exclusively_jointly_same(a, b, c) False >>> a=np.array([1,2,3,4,5]) >>> b=np.array([1,2,0,0,5]) # First value both 1 >>> c=np.array([1,0,3,4,0]) >>> is_exclusively_jointly_same(a, b, c) False
如果您想要的是:
对于每个职位,至少
b
和c
中的一个应与[{1}}具有相同的值
,然后您需要更改为OR而不是XOR,如下所示:
a
示例:
>>> a=np.array([1,2,3,4,5]) >>> b=np.array([1,2,0,0,5]) >>> c=np.array([0,0,3,4,0]) >>> is_jointly_same(a, b, c) True >>> a=np.array([1,2,3,4,5]) >>> b=np.array([0,2,0,0,5]) # First value both not 1 >>> c=np.array([0,0,3,4,0]) >>> is_jointly_same(a, b, c) False >>> a=np.array([1,2,3,4,5]) >>> b=np.array([1,2,0,0,5]) # First value both 1 >>> c=np.array([1,0,3,4,0]) >>> is_jointly_same(a, b, c) True
这里的关键是,def is_jointly_same(a, b, c):
return np.logical_or(a==b, a==c).all() # or use | below
# return ((a==b) | (a==c)).all()
应该一次作为最终聚合器,当已经计算出每个单独的值时。因此,当您发现多次应用.all()
时,您应该担心。
答案 2 :(得分:0)
您可以尝试这种方式:
(a==b).all() or (a==c).all()
答案 3 :(得分:-1)
实际上all()函数如果iterable的所有元素都为true(或者iterable为空),则返回True。 在编程语言中,0被认为是假,任何其他整数都被认为是真的。 所以在你的数组a,b,c中,每个元素都是非零的,a.all(),b.all()和c.all()它们都是单独返回true,所以最后你会变成真的。