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

如何将numpy数组中子列表的第二个元素除以第一个元素?

问题描述

我有一个变量var,在Jupyter中直接打印输出如下:

var
# array([list([9166855000000.0, 13353516.0]),
#        list([7818836000000.0, 11389833.0]),
#        list([20269756000000.0, 29527304.0]),
#        list([66886956000000.0, 97435384.0]),
#        list([58686560000000.0, 85489730.0]),
#        list([50809440000000.0, 74014984.0])], dtype=object)

使用print(var)时输出:

print(var)
# [list([9166855000000.0, 13353516.0]) 
#  list([7818836000000.0, 11389833.0])
#  list([20269756000000.0, 29527304.0])
#  list([66886956000000.0, 97435384.0]) 
#  list([58686560000000.0, 85489730.0])
#  list([50809440000000.0, 74014984.0])]

该变量类型为:

print(type(var))
# <class 'numpy.ndarray'>

需要将每个子列表的第二个元素除以第一个元素,得到类似以下形式的数组或列表:

13353516.0/9166855000000.0
...
74014984.0/50809440000000.0
解决方案

方法1:转换为数值型numpy数组后做向量化运算

当前数组是dtype=object类型,内部元素为Python列表,先将其转换为二维数值型数组,再直接执行列除法:

import numpy as np

# 转换为二维float数组
arr = np.array(var.tolist(), dtype=np.float64)
# 第二个元素列除以第一个元素列
result = arr[:, 1] / arr[:, 0]

执行后result即为目标numpy数组,直接打印可得到所有除法结果。

方法2:列表推导式生成Python列表

如果需要Python列表格式,直接遍历原数组计算:

result = [item[1] / item[0] for item in var]

该方法无需额外数组转换,逻辑直观简洁。

方法3:numpy vectorize函数(仅作参考,不推荐大数据量场景)

用np.vectorize包装除法逻辑,对每个元素逐个处理:

divide_func = np.vectorize(lambda x: x[1]/x[0])
result = divide_func(var)

注意:vectorize本质是循环实现,性能不如向量化运算,数据量大时优先选择方法1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:55:14