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

如何在Numpy数组中添加由行内现有值计算的列(BMI示例)

在Numpy数组中添加计算得到的BMI列

问题分析

你当前的代码存在两个核心问题:

  1. 身高列提取错误:female[:,:1]取的是数组第一列(体重),而非身高列,应该改为female[:,1]或female[:,1:2]获取第二列的身高数据。
  2. 结果格式不符合需求:循环中append的是单个元素的numpy数组,最终得到的是数组列表,无法直接和原数组合并。Numpy的核心优势是向量化运算,完全不需要用逐行循环来实现。

正确实现步骤

假设female是n行2列的数组,第一列为体重(单位:kg),第二列为身高(分两种情况处理):

情况1:原始身高单位是厘米(需转为米)

# 提取体重(一维数组)
weights = female[:, 0]
# 提取身高并转换为米
heights = female[:, 1] / 100
# 向量化计算BMI,四舍五入保留2位小数
bmi = np.round(weights / (heights ** 2), 2)
# 将BMI转为二维数组后,与原数组合并
female_with_bmi = np.column_stack((female, bmi))

情况2:原始身高单位已经是米(如你给出的示例)

去掉身高转换的步骤即可:

# 直接用原数组列进行向量化计算
bmi = np.round(female[:, 0] / (female[:, 1] ** 2), 2)
# 合并数组(reshape将一维BMI转为n行1列的二维结构,匹配原数组维度)
female_with_bmi = np.hstack((female, bmi.reshape(-1, 1)))

验证示例

如果输入的female数组是:

female = np.array([[100, 1.5], [130, 1.6]])

运行代码后得到的female_with_bmi结果为:

array([[100.  ,   1.5 ,  44.44],
       [130.  ,   1.6 ,  50.78]])

和你期望的格式完全一致(小数位差异是计算精度导致,可通过调整np.round的参数控制)。

为什么不用循环?

Numpy的向量化运算比Python循环效率高得多,尤其是数组规模较大时,能显著提升运行速度,同时代码更简洁易读。

内容的提问来源于stack exchange,提问作者Riley Oussoren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:30:49