如何检查数组的所有值是否彼此相等?



我想检查一个数组中是否有相同的值。示例如下:

array1 = np.array([1,1,1,1,1]) would return True
array2 = np.array([1,0,1,0,1]) would return False

我知道如何检查数组中的所有值是否等于某个值。但我想检查数组中所有的值是否相等,不管这个值是多少。有没有一种方法可以做到这一点,只是Numpy不创建一个函数?

您可以使用python集。如果集合的长度为1,则所有值都相同:

>>> len(set(array1)) == 1
True
>>> len(set(array2)) == 1
False

可以使用-np.unique

import numpy as np
array1 = np.array([1,1,1,1,1])
#following passes assertion test
assert(len(np.unique(array1, return_counts=True)[0])==1)
#without getting counts of unique values
#assert(len(np.unique(array1))==1)
array2 = np.array([1,0,1,0,1])
#following will throw an assertion error
assert(len(np.unique(array2, return_counts=True)[0])==1)

这也可以工作,似乎比其他一些方法快一些:

>>> array1 = np.array([1,1,1,1,1])
>>> array2 = np.array([1,0,1,0,1])
>>> (array1 == array1[0]).all()
True
>>> (array2 == array2[0]).all()
False

一些非常与其他解决方案相比,10k阵列的粗略时序图:

  • this approach: 1.07 msec
  • np.isin(): 1.23 msec
  • set(): 2.63 msec

我的尝试是将所有项目与第一个项目进行比较,然后检查结果是否包含False:

import numpy as np
array1 = np.array([1,1,1,1,1])
print(not np.isin(False, array1 == array1[0]))
在我的机器上,当数组中大约有700个数字时,这比len(set())版本要快。在10000个条目时,它的速度是5.5倍。但它比np.unique()版本慢。在Core i7-10750H上测试,10000次迭代

相关内容

最新更新