我有一个2d numpy数组,我试图沿着axis = 0
(行)返回模式数组。但是,我想返回最常见的行组合。而不是所有三列的三种模式,这就是the统计模式所做的。下面的示例中所需的输出将是[9,9,9]
,因为这是最常见的唯一行。谢谢
from scipy import stats
arr1 = np.array([[2,3,4],[2,1,5],[1,2,3],[2,4,4],[2,8,2],[2,3,1],[9,9,9],[9,9,9]])
stats.mode(arr1, axis = 0)
产出:
ModeResult(mode=array([[2, 3, 4]]), count=array([[5, 2, 2]]))
发布于 2022-11-15 09:48:44
您可以使用numpy唯一的函数和返回计数。
unique_arr1, count = np.unique(arr1,axis=0, return_counts=True)
unique_arr1[np.argmax(count)]
产出:
array([9, 9, 9])
np.unique按排序顺序返回唯一的数组,这意味着最后一个数组是最大的。你可以简单地做:
out = np.unique(arr1,axis=0)[-1]
但是,我不知道您想要用于什么目的,但我只想提到,您可以拥有所有的计数,以防您想要验证或说明多个行的相同计数。
Update给出了更多的信息,这是针对图像的(可能很大),最重要的是,第二个dim可以放进一个int中(每个值要么是uin8,要么是16)可以在int32或64中运行。(考虑到uint8中每个像素的值):
pixel, count = np.unique(np.dot(arr, np.array([2**16,2**8,1])), return_counts=True)
pixel = pixel[np.argmax(count)]
b,g, r, = np.ndarray((3,), buffer=pixel, dtype=np.uint8)
这可能会导致一个大的加速。
https://stackoverflow.com/questions/74443183
复制相似问题