You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 19:02:29