Python 对2D np.array中特定行对应的行(向量)进行计数
我有一个Python 对2D np.array中特定行对应的行(向量)进行计数,python,arrays,numpy,Python,Arrays,Numpy,我有一个np.array,基本上是RGB格式的图像。我对它进行了改造,使其更易于使用。因此,它的形状类似于:(22618,3),每行对应一个像素。我想检查是否有一些像素对应于特定的颜色,以及其中有多少是这种颜色 假设颜色是元组中定义的(0,255,255)和(255,0,0)。另外,包含数据的np.array是data(真正的原创!) 当我尝试时: any(data[(data2 == colors[0])]) 它按预期工作。如果有任何像素(三元组)对应于颜色[0]的三元组,则返回True否则
np.array
,基本上是RGB格式的图像。我对它进行了改造,使其更易于使用。因此,它的形状类似于:(22618,3)
,每行对应一个像素。我想检查是否有一些像素对应于特定的颜色,以及其中有多少是这种颜色
假设颜色是元组中定义的(0,255,255)
和(255,0,0)
。另外,包含数据的np.array是data
(真正的原创!)
当我尝试时:
any(data[(data2 == colors[0])])
它按预期工作。如果有任何像素(三元组)对应于颜色[0]
的三元组,则返回True
否则False
。
但当我尝试以下方法时:
np.sum(data[(data == colors[1])])
结果是将发现包含相同颜色的每个像素的所有像素值(R+G+B)相加
我只使用了包含布尔值的数组(data==colors[1]
),但几乎没有成功。此外,我还尝试了对特定轴求和,但没有多大帮助:
np.sum(data == colors[1], axis=0)
数组([373226122618])
我可以在这里做一些复杂的数学运算,知道最多373个像素可以是正确的颜色,但这不是精确的计算。我可以在这里使用一些功能,比如bincount
,但是结果似乎需要额外的工作,而且一些实验没有显示出预期的效果
那么,如何计算具有相同颜色的像素数呢?有什么想法吗?让我们看看这些数据:
data = np.array([(0,0,255),(0,0,255),(0,255,0),(0,0,0)])
我们正在寻找这种颜色:
colour = (0,0,255)
计算匹配的元组数:
match = [(x == colour).all() for x in data]
你的回答是:
print(np.sum(match))
一艘班轮:
print(np.sum([(x == colour).all() for x in data]))
(如果我答对了)您希望给定行的所有元素都与模板颜色匹配,因此应该使用
np.all
行方式,即沿轴1。这将产生一个布尔数组,每行有一个真值
剩下要做的就是数一数:
np.count_nonzero(np.all(data == colors[i], axis=1))
如果您对多种颜色感兴趣,那么按照以下方法进行操作会更有效:
import numpy_indexed as npi
unique_colors, counts = npi.count(npi.intersection(data, colors))
这将有效地计算所有感兴趣颜色的计数。(免责声明:我是该软件包的作者)。关于np.count\u nonzero(np.all(data==colors[I],axis=1))
?@PaulPanzer这应该是一个答案…@liliscent,如果你这么说;-)向上投票(最小长度)