Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对2D np.array中特定行对应的行(向量)进行计数_Python_Arrays_Numpy - Fatal编程技术网

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,如果你这么说;-)向上投票(最小长度)