gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 22:17:56 29 4
gpt4 key购买 nike

我想检查 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com