如何用Numpy计算二维数组各单元格占对应列总和的百分比?
计算Numpy二维数组元素占对应列总和的百分比
嘿,刚入门Numpy的话,这个需求其实用Numpy的广播特性就能轻松搞定,而且完全适配任意大小的二维数组,我给你一步步拆解怎么做:
1. 基础准备与列总和计算
首先我们先导入Numpy并定义你的示例数据,然后计算每一列的总和——这里关键是用axis=0参数,它表示沿着行的方向求和,也就是得到每一列的总和:
import numpy as np # 你的示例数据 data = np.array([[7,16,17], [12,11,3]]) headers = ["Grundskola", "Gymn", "Akademisk"] # 计算每列总和,axis=0对应按列求和 column_sums = np.sum(data, axis=0) # 此时column_sums的值是:array([19, 27, 20])
2. 计算百分比数组
接下来利用Numpy的广播机制,直接让原数组的每个元素除以对应列的总和,再乘以100就能得到百分比数值。这里不用手动处理维度匹配,Numpy会自动把一维的列总和数组扩展成和原数组匹配的维度:
# 计算百分比(保留原始精度) percentage_array = (data / column_sums) * 100 # 输出结果: # array([[36.84210526, 59.25925926, 85. ], # [63.15789474, 40.74074074, 15. ]])
3. 格式化显示(可选)
如果想要像示例里那样显示整数百分比(比如39%、61%),可以先四舍五入再转成整数,甚至直接生成带%符号的字符串:
# 四舍五入为整数百分比 rounded_percentages = np.round(percentage_array).astype(int) # 格式化为带%的字符串数组 percentage_strings = np.char.mod("%d%%", rounded_percentages) # 输出结果: # array([['37%', '59%', '85%'], # ['63%', '41%', '15%']], dtype='<U3')
4. 打印成带表头的表格(可选)
最后可以把结果和表头结合,打印成清晰的表格:
print("\t".join(headers)) for row in percentage_strings: print("\t".join(row))
输出效果:
Grundskola Gymn Akademisk 37% 59% 85% 63% 41% 15%
这个方法的好处是完全适配任意大小的二维数组——不管你的数组是3行5列还是10行20列,只要用np.sum(data, axis=0)计算列总和,然后做除法运算就行,Numpy会自动处理所有维度匹配的问题。
内容的提问来源于stack exchange,提问作者Line in Linus
相关产品推荐
相关产品推荐

