Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy查找数组中列之间的一致性_Python_Arrays_Numpy - Fatal编程技术网

Python Numpy查找数组中列之间的一致性

Python Numpy查找数组中列之间的一致性,python,arrays,numpy,Python,Arrays,Numpy,我有来自“n”个不同的人的标签,他们对“m”项进行评级(0或1),因此是一个m x n数组。例如,3人对4个项目进行评级: arr = np.asarray([[1,1,1], [1,1,0], [0,0,0], [0, 1, 0]]) print(arr) >>> [[1 1 1] [1 1 0] [0 0 0] [0 1 0]] 我想看看每个人都“同意”哪些项目,即行中的所有值都相同。在这个例子中,答案是[真,假,真,假]。我用这个让它工作起来: np.logica

我有来自“n”个不同的人的标签,他们对“m”项进行评级(0或1),因此是一个m x n数组。例如,3人对4个项目进行评级:

arr = np.asarray([[1,1,1], [1,1,0], [0,0,0], [0, 1, 0]])
print(arr)
>>>
[[1 1 1]
 [1 1 0]
 [0 0 0]
 [0 1 0]]
我想看看每个人都“同意”哪些项目,即行中的所有值都相同。在这个例子中,答案是[真,假,真,假]。我用这个让它工作起来:

np.logical_or(arr.sum(axis=1) == n, arr.sum(axis=1) == 0)

有点黑。做这件事的更好方法是什么?

一种替代方法是沿行计算
diff
,然后检查所有
diff
s是否等于0;这将确保一行中的所有元素都相同(并且可以不同于0和1):

或者,如果只有0和1,则:

(arr == 1).all(1) | (arr == 0).all(1)
# array([ True, False,  True, False], dtype=bool)

arr.all(1) | ~arr.any(1)
# array([ True, False,  True, False], dtype=bool)
我认为
len(set(.))
基本上就是您正在寻找的
is_uniform
函数:

[len(set(x)) == 1 for x in arr]
请注意,此解决方案非常通用,不需要:

  • 每个项目的投票人数相同
  • 值为数字或任何特定类型
  • 核心python之上的附加包

  • 或者使用
    列表理解
    使元素的长度等于
    i
    的第一个元素的计数(因此基本上看它们在
    i
    中是否都是相同的值),如果它们与条件不匹配,则改为

    print([len(i)==i.tolist().count(i[0]) for i in arr])
    
    输出:

    [True, False, True, False]
    

    arr.sum(轴=1)%n==0也起作用。这很顺利。如果arr是一个列表列表(每个用户一个评级列表),您将如何修改它以使其工作?你现在不能像遍历numpy数组那样遍历这些行。正如我修改后的答案所提到的,这个解决方案不仅很流畅,而且非常通用:)这是否回答了你的后续问题?你的解决方案假设arr是一个iterable,每个对象都是Hmm的集合,你能举个例子更新你的问题吗?考虑到问题的本质,很难想象arr不是一个iterable,我是否认为我已经解决了这个问题:在这种情况下,您必须使用zip()将n个列表中的每一行转换为1个元组,然后它才能工作。
    [True, False, True, False]