Python numpy,求和矩阵的结果是错误的

Python numpy,求和矩阵的结果是错误的,python,numpy,matrix,Python,Numpy,Matrix,当每个矩阵的最大值为255且这些值位于同一位置时,为什么将RGB通道矩阵相加不会得到765的最大结果?但如果所有矩阵都除以255,则最大值为3 import numpy as np from PIL import Image pic= Image.open(picture_dir) r,g,b = pic.split() g_ = np.asarray(g) b_ = np.asarray(b) r_ = np.asarray(r) print((r_+g_+b_).max()) # gi

当每个矩阵的最大值为255且这些值位于同一位置时,为什么将RGB通道矩阵相加不会得到765的最大结果?但如果所有矩阵都除以255,则最大值为3

import numpy as np
from PIL import Image

pic= Image.open(picture_dir)
r,g,b = pic.split()

g_ = np.asarray(g)
b_ = np.asarray(b)
r_ = np.asarray(r)

print((r_+g_+b_).max()) # gives result of 255, supposed to be 765


g_mat = np.asarray(g)/255
b_mat = np.asarray(b)/255
r_mat = np.asarray(r)/255

print((g_mat+b_mat+r_mat).max()) # gives result of 3.0
细分(比如这里的:np.asarray(g)/255)实际上改变了除值以外的任何东西吗


编辑:分割前的数据类型为uint8,分割后的浮点64

尝试检查g、b和r的类型

如果他们的类型为numpy.uint8,您应该会得到一个警告,结果应该是253


在第二种情况下,g_-mat、b_-mat和r_-mat在除法时被转换为numpy.int64

我在这里的假设是,您正在创建某种包含三个值的数据结构,而不是将它们相加。max只是返回数据结构中的最大值。我知道它们在相同的位置,因为我编辑了图片,使其具有相同的值,或者换句话说,我只是将一些部分变为白色。如果
r\u
g\u
b\u
具有数据类型uint8,那么
r\u+g\u+b\u
,如果一个元素在所有三个元素中都是255,那么总和将是253。他将被一个整数值除,因此如果数组是
uint8
,它将不会在除法过程中转换为浮点。我从来没有说过浮点。结果将转换为numpy.int64,您很可能会得到结果3。在第一种情况下,您得到了一个溢出,因此255(出于某种原因,我得到了253)是的,我认为这就是问题所在(我的意思是类型是
uint8
)。如果OP切换到
int
dtype,例如
r\u=np.asarray(r\u,int)
,它应该可以工作。我的错误-你写了“int64”,而我错误地认为是“float64”。因此,将几个uint8矩阵相加总会得到另一个uint8 dtype矩阵(上限为255)?