【问题标题】:Memory efficient majority voting cell wise for large matrix in NumpyNumpy中大矩阵的内存高效多数表决单元
【发布时间】:2021-10-10 05:23:07
【问题描述】:

给定一个数组列表,我想提取每个单元格中的频繁元素。

例如对于3个数组

arr 1

0,0,0
0,4,1
0,1,4

arr 2

0,0,0
0,7,1
0,1,1

arr 3

5,0,0
0,4,1
0,1,1

每个单元格出现频率最高的元素是

0 0 0
0 4 1
0 1 1

我可以知道如何使用 Numpy 实现这一目标吗?并且在实际情况下,数组列表的形状可以达到 10k。

数组列表定义如下

import numpy as np

arr=np.array([[0,0,0],[0,4,1],[0,1,4]])
arr2=np.array([[0,0,0],[0,7,1],[0,1,1]])
arr3=np.array([[5,0,0],[0,4,1],[0,1,1]])
arr = np.stack([arr,arr2,arr3], axis=0)

【问题讨论】:

  • 请发一个合适的minimal reproducible example
  • 以我的拙见,OP 已经足够并且清楚地说明了预期的目标。
  • 至少在您的数据周围添加np.array(...) 以确保我们都在同一个页面上会很有用
  • 我同意你的观点。该帖子已更新以反映这一点

标签: python numpy


【解决方案1】:

您可以将stack 数组转换成一个大矩阵,然后沿感兴趣的轴使用scipy.stats.mode

import numpy as np
import scipy.stats
arr1 = [[0,0,0],
        [0,4,1],
        [0,1,4]]
arr2 = [[0,0,0],
        [0,7,1],
        [0,1,1]]
arr3 = [[5,0,0],
        [0,4,1],
        [0,1,1]]

arr = np.stack((arr1, arr2, arr3), axis=0)
output = scipy.stats.mode(arr, axis=0).mode[0]
print(output)

# [[0 0 0]
#  [0 4 1]
#  [0 1 1]]

【讨论】:

    猜你喜欢
    • 2013-10-21
    • 1970-01-01
    • 2012-10-14
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 2018-04-22
    相关资源
    最近更新 更多