直方图多维numpy数组的一个维度,并使用它来规范化不同维度的直方图

  • 本文关键字:直方图 规范化 一个 数组 numpy numpy
  • 更新时间 :
  • 英文 :


给定如下格式的numpy数组:

'aa', '1' 
'ab', '1'
'ab', '1'
'ba', '2'
'ba', '2'

可以用numpy。唯一的直方图每个列的元素单独。通过对第一列的直方图,我可以得到第一列中元素的唯一计数如下:

'aa' = 1; 'ab' = 2; 'ba' = 2.

对第二列进行直方图将得到

'1' = 3; '2' = 2.

我想用第二列直方图的输出对第一列直方图的输出进行规范化,得到:

'aa' = 1/3; 'ab' = 2/3;  'ba' = 2/2;

是否有一个好的方法来实现这一点?

首先获取每个数字的计数和唯一值,并将其转换为查找字典

unique_vals, counts = np.unique(arr[:,1],return_counts=True)    
freq = 1 / counts
lookup = dict(zip(unique_vals, freq))

获取对应频率的numpy数组,然后查找数组中的每个唯一字母并将频率求和。

freqs = np.vectorize(lookup.get)(arr[:,1]) 
unique_letters = np.unique(arr[:,0])
{ letter: np.sum(freqs[letter==arr[:,0]]) for letter in unique_letters}

返回
{'aa': 0.3333333333333333, 'ab': 0.6666666666666666, 'ba': 1.0}

最新更新