python - 如何检查numpy矩阵的列中的所有值是否相同?

标签 python matrix numpy

我想检查 numpy 数组/矩阵的列中的所有值是否相同。 我尝试使用 ufuncreduce equal,但似乎并非在所有情况下都有效:

In [55]: a = np.array([[1,1,0],[1,-1,0],[1,0,0],[1,1,0]])

In [56]: a
Out[56]: 
array([[ 1,  1,  0],
       [ 1, -1,  0],
       [ 1,  0,  0],
       [ 1,  1,  0]])

In [57]: np.equal.reduce(a)
Out[57]: array([ True, False,  True], dtype=bool)

In [58]: a = np.array([[1,1,0],[1,0,0],[1,0,0],[1,1,0]])

In [59]: a
Out[59]: 
array([[1, 1, 0],
       [1, 0, 0],
       [1, 0, 0],
       [1, 1, 0]])

In [60]: np.equal.reduce(a)
Out[60]: array([ True,  True,  True], dtype=bool)

为什么第二种情况的中间列也计算为True,而应该是False

感谢您的帮助!

最佳答案

In [45]: a
Out[45]: 
array([[1, 1, 0],
       [1, 0, 0],
       [1, 0, 0],
       [1, 1, 0]])

将每个值与第一行中的对应值进行比较:

In [46]: a == a[0,:]
Out[46]: 
array([[ True,  True,  True],
       [ True, False,  True],
       [ True, False,  True],
       [ True,  True,  True]], dtype=bool)

如果该列中的所有值都为 True,则该列共享一个公共(public)值:

In [47]: np.all(a == a[0,:], axis = 0)
Out[47]: array([ True, False,  True], dtype=bool)

np.equal.reduce 的问题可以通过微分析应用于[1, 0, 0, 1]时发生的情况来看出:

In [49]: np.equal.reduce([1, 0, 0, 1])
Out[50]: True

前两项 10 进行相等性测试,结果为 False:

In [51]: np.equal.reduce([False, 0, 1])
Out[51]: True

现在 False0 进行相等性测试,结果为 True:

In [52]: np.equal.reduce([True, 1])
Out[52]: True

但是True和1是相等的,所以总的结果是True,并不是想要的结果。

问题是 reduce 试图在“本地”累积结果,而我们想要像 np.all 这样的“全局”测试。

关于python - 如何检查numpy矩阵的列中的所有值是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14859458/

相关文章:

python - 如何循环遍历多个 URL 以从 Scrapy 中的 CSV 文件中抓取?

python - 尝试实例化 NumPy RandomState 时出现 Numba 错误

algorithm - 如何优化多(矩阵)开关/案例算法?

python - numpy 矩阵排名不正确的结果

python - Pandas:数据框与用于定义它的 numpy.array 之间的关系

python - python中的字符串日期到日期对象

python - 根据算法或模式重新排序 python 列表

matrix - 如何计算向量之和

python - 从 numpy digitize 计算 bin 的百分位数?

python - numpy TypeError : ufunc 'invert' not supported for the input types, 和输入