如何用Numpy数组第二列直方图归一化第一列直方图结果?
Numpy实现列计数归一化的简便方法
先把你的输入转换成numpy数组:
import numpy as np arr = np.array([ ['aa', '1'], ['ab', '1'], ['ab', '1'], ['ba', '2'], ['ba', '2'] ], dtype=str)
可以用以下步骤快速实现需求:
第一步:关联第一列元素与第二列分组
用np.unique获取第一列的唯一值、计数,同时记录每个唯一值对应的第二列分组:col1_vals, col1_indices, col1_counts = np.unique(arr[:, 0], return_inverse=True, return_counts=True) group_labels = arr[col1_indices, 1]第二步:统计第二列分组的总计数
直接对第二列做唯一值计数:group_vals, group_counts = np.unique(arr[:, 1], return_counts=True)第三步:计算归一化结果
用numpy的索引匹配直接完成除法,避免循环:# 匹配每个第一列元素所属分组的总计数 group_counts_matched = group_counts[np.searchsorted(group_vals, group_labels)] # 计算归一化值并和第一列值对应 normalized_result = dict(zip(col1_vals, col1_counts / group_counts_matched))
运行后normalized_result的结果就是:
{'aa': 0.3333333333333333, 'ab': 0.6666666666666666, 'ba': 1.0}
这种方法用numpy矢量化操作完成,比手动遍历数组效率高,适合处理大规模数据。
内容的提问来源于stack exchange,提问作者PyariBilli
相关产品推荐
相关产品推荐

