创建具有线性细分的对数刻度的Pythonic方法

问题描述 投票:0回答:1

是否有更Pythonic的方法来创建具有线性细分的对数刻度?

def log_linsub(start, end):
    'Creates a log scale from 10**start to 10**end with linear subdivisions.'
    base = np.array(range(1, 10))
    seq = [base*10**val for val in range(start, end)]
    seq = list(np.array(seq).flatten())
    seq.append(10**end)
    return np.array(seq)
python numpy
1个回答
0
投票
def log_linsub(start, end):
    "Creates a log scale from 10**start to 10**end with linear subdivisions."
    return np.unique(
        [
            base * 10**val 
            for val in range(start, end) 
            for base in range(1, 11)
        ]
    )

解释一些重构:

  • 由于您对
    range(1, 10)
    range(start, end)
    进行了迭代,因此可以将其更改为列表理解,使其更加清晰和Pythonic;
  • 您拥有最后一个代码片段的原因是由于其末尾不包含范围,这会导致某些值重复,例如。
    start=1, end=3
    处有 100 和 1000 个值,但您可以使用 np.unique (如果需要 np.array)或
    set(...)
  • 进行重复数据删除
© www.soinside.com 2019 - 2024. All rights reserved.