首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在2d numpy数组行中寻找唯一数组组合的模式

在2d numpy数组行中寻找唯一数组组合的模式
EN

Stack Overflow用户
提问于 2022-11-15 09:19:38
回答 1查看 29关注 0票数 0

我有一个2d numpy数组,我试图沿着axis = 0 (行)返回模式数组。但是,我想返回最常见的行组合。而不是所有三列的三种模式,这就是the统计模式所做的。下面的示例中所需的输出将是[9,9,9],因为这是最常见的唯一行。谢谢

代码语言:javascript
运行
复制
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)

产出:

代码语言:javascript
运行
复制
ModeResult(mode=array([[2, 3, 4]]), count=array([[5, 2, 2]]))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-15 09:48:44

您可以使用numpy唯一的函数和返回计数。

代码语言:javascript
运行
复制
unique_arr1, count = np.unique(arr1,axis=0, return_counts=True)
unique_arr1[np.argmax(count)]

产出:

代码语言:javascript
运行
复制
array([9, 9, 9])

np.unique按排序顺序返回唯一的数组,这意味着最后一个数组是最大的。你可以简单地做:

代码语言:javascript
运行
复制
out = np.unique(arr1,axis=0)[-1]

但是,我不知道您想要用于什么目的,但我只想提到,您可以拥有所有的计数,以防您想要验证或说明多个行的相同计数。

Update给出了更多的信息,这是针对图像的(可能很大),最重要的是,第二个dim可以放进一个int中(每个值要么是uin8,要么是16)可以在int32或64中运行。(考虑到uint8中每个像素的值):

代码语言:javascript
运行
复制
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)

这可能会导致一个大的加速。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74443183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档