如何解决二元矩阵 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)))
这可能是一个小问题,但我现在很困惑。谢谢你的帮助。我把结果截图在附图中。
解决方法
根据定义,总和应该相同。 我唯一能想到的是,您的数组的 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 举报,一经查实,本站将立刻删除。