Python的stdlib中有linspace函数吗



Python的标准库中是否有类似matlab的linspace的函数?

如果没有,有没有一种简单的方法可以在不安装外部包的情况下实现它?

以下是用matlab术语快速简单地定义linspace。

注意

我不需要链接定义的"矢量结果",列表就可以了。

实现这一点的最简单方法是生成器函数:

from __future__ import division
def linspace(start, stop, n):
    if n == 1:
        yield stop
        return
    h = (stop - start) / (n - 1)
    for i in range(n):
        yield start + h * i

示例用法:

>>> list(linspace(1, 3, 5))
[1.0, 1.5, 2.0, 2.5, 3.0]

也就是说,您绝对应该考虑使用NumPy,它提供了numpy.linspace()函数和许多其他功能,可以方便地使用数字数组。

不,不是。你可以自己编写(whicn并不难),但如果你使用Python来实现matlab的一些功能,那么你肯定想安装numpy,它有numpy.linspace

您可能会发现NumPy为Matlab用户提供了丰富的信息。

您可以定义一个函数来执行此操作:

def linspace(a, b, n=100):
    if n < 2:
        return b
    diff = (float(b) - a)/(n - 1)
    return [diff * i + a  for i in range(n)]

只要间距>1,这就是Python等价于以下MATLAB函数调用:linspace(start,stop,spacing)

start = 5
stop = 6
spacing = int(11)
linspace = [start + float(x)/(spacing-1)*(stop-start) for x in range(spacing)]

使用numpy的Python 3解决方案

import numpy as np
    
x1 = np.linspace(-3,3,11)

解决方案使用列表理解重写

  1. 我们如何得到11个线性间隔的数字btw-3&3.

    x2 = [i for i in range(-5,6)]

  2. 我们如何将这些int [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]从-5缩小到-5,再从-3缩小到3?

    i/(5/3) 
    x2 = [ i for i/(5/3) in range(-5,6)]
    print(x2)