我想检查一个数组中是否有相同的值。示例如下:
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 msecset()
: 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次迭代