You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Numpy判断二维数组每行元素是否全部相同(含0)

判断二维Numpy数组每行元素是否全部相同(含0)

需求是判断二维Numpy数组的每行元素是否全部相同,0属于合法取值。示例如下:

>>> a = np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2], [3, 3, 3]])
>>> a
array([[0, 0, 0],
       [1, 1, 1],
       [2, 2, 2],
       [3, 3, 3]])
>>> function_to_find(a)
True

尝试过用all()和any()组合,但不符合需求:

>>> a = np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2], [3, 3, 3]])
>>> a.all()
False
>>> a.all(axis=1)
array([False,  True,  True,  True])
>>> a.all(axis=1).any()
True

比如当数组为[[0,0,0],[1,1,1],[2,2,2],[3,3,5]]时,上述方法仍返回True,但实际需要得到False。

已有基于循环的实现,但希望改用纯Numpy方法:

results_bool = np.array([])

for i in a:
    results_bool = np.append(results_bool, np.all(i == i[0]))

result = np.all(results_bool)

纯Numpy解决方案

方法一:广播逐元素比较

利用Numpy的广播机制,直接对比每行所有元素与该行第一个元素是否一致:

import numpy as np

def check_all_rows_same(a):
    return np.all(a == a[:, [0]], axis=1).all()
  • a[:, [0]]提取每行第一个元素,生成形状为(n,1)的数组,与原数组(n,m)广播后逐元素比较;
  • np.all(..., axis=1)对每行的比较结果取逻辑与,得到标记每行是否全同的布尔数组;
  • 最后用np.all()判断所有行是否都满足条件。

测试验证:

# 全部行元素相同
a1 = np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2], [3, 3, 3]])
print(check_all_rows_same(a1))  # 输出: True

# 存在行元素不同
a2 = np.array([[0,0,0],[1,1,1],[2,2,2],[3,3,5]])
print(check_all_rows_same(a2))  # 输出: False

方法二:对比每行最大最小值

如果每行的最大值和最小值相等,说明该行所有元素一致:

def check_all_rows_same(a):
    return np.all(np.max(a, axis=1) == np.min(a, axis=1))

这个方法逻辑直观,计算效率也不错,适合数值型数组。


内容的提问来源于stack exchange,提问作者cicciodevoto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 19:25:21