微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

二元矩阵 aa只包含 0, 1,为什么 sum(sum(aa)) 不等于 sum(sum(aa>0))?

如何解决二元矩阵 aa只包含 0, 1,为什么 sum(sum(aa)) 不等于 sum(sum(aa>0))?

我有一个名为crop_mask的二进制掩码,它只包含0和1。为什么sum(sum(aa1))不等于sum(sum(aa2))。

aa1 =crop_mask, aa2 = (aa1>0)

打印(总和(总和(aa1)),总和(总和(aa2)))

这可能是一个小问题,但我现在很困惑。谢谢你的帮助。我把结果截图在附图中。

updated screenshot

解决方法

根据定义,总和应该相同。 我唯一能想到的是,您的数组的 dtype(假设您使用的是 numpy 数组)不是 int 或 float。 您是否检查过 aa2 中的“True”是否与 aa1 中的“1”匹配?

编辑:
dtype = np.uint8 将列总和的最大值限制为 255 (2^8)。所以 sum(sum(a)) --> sum([0,160,...]) (160 是 4000/256 的余数)

aa0 = aa0.astype(int) 将解决您的问题

a = np.zeros((4000,4000)).astype(np.uint8)
a[:,1] = 1
a[:,4] = 1

b = (a > 0)

sum(sum(b)) # 8000
sum(sum(a)) # 320

a = a.astype(int)
sum(sum(a)) #8000
,

假设您的 cropmask 确实是一个只有 1 和 0 的二维 ndarray,这是可行的:

import numpy as np

cropmask = np.array([[1,1,1],[1,0],0]],np.uint8)
x = (cropmask > 0)

print(sum(sum(cropmask)),sum(sum(x)))

结果:

6 6

这里最可能的原因是您错了,您的 cropmask 实际上并不只包含 1 和 0。

你试过了吗:

print(sum(sum(np.logical_and((0 != crop_mask),(1 != crop_mask)))))

如果该值大于 0,则说明还有其他内容。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。