【发布时间】:2013-01-29 08:20:44
【问题描述】:
我想检查 numpy 数组/矩阵的列中的所有值是否相同。
我尝试使用ufunc equal 中的reduce,但似乎并非在所有情况下都有效:
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?
感谢您的帮助!
【问题讨论】:
-
这个问题困扰了我一段时间。虽然@Ubuntu 的解决方案足够优雅,但尝试在 4096**3 双数组上运行它只是为了得到一个布尔数组来占用你剩下的任何内存,这并不是很愉快。我正在玩弄一个使用
np.equal(a, a[:, 0, None])的纯Python 实现,但结果是同样的问题。因此,我正在为 numpy 添加一个新函数np.same来处理这种情况。