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

如何减少列表与numpy数组转换,创建带线性细分的对数刻度?

优化带线性细分的对数刻度生成函数(减少数组/列表转换)

原函数的问题在于频繁在列表和numpy数组之间来回转换,不仅冗余还容易引发类型混淆。下面是全程基于numpy操作的优化版本,彻底避免不必要的类型转换:

import numpy as np

def log_linsub(start, end):
    '''创建从10**start到10**end、带有线性细分的对数刻度'''
    # 生成1-9的基础刻度数组
    base = np.arange(1, 10)
    # 生成从start到end-1的指数序列
    exponents = np.arange(start, end)
    # 利用numpy广播直接计算所有细分值,得到形状为(9, end-start)的数组
    seq = base[:, None] * 10 ** exponents
    # 扁平化数组后,拼接上最终的10**end刻度
    return np.concatenate([seq.flatten(), [10**end]])

关键优化点:

  • 用np.arange直接生成numpy数组,替代range转数组的步骤
  • 借助numpy广播机制,一次性计算所有数量级内的线性细分值,不需要用列表推导生成数组列表
  • 全程保持numpy数组操作,用np.concatenate替代列表的append,彻底消除列表与数组的来回转换
  • 最终直接返回numpy数组,无需额外类型转换

测试示例:

调用log_linsub(0, 2)会返回:

array([  1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  20,  30,  40,
        50,  60,  70,  80,  90, 100])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:33:14