天天看点

等比数列求和python_python numpy生成等差数列、等比数列的实例

如下所示:

import numpy as np

# 等差数列

print(np.linspace(0.1, 1, 10, endpoint=True))

print(np.arange(0.1, 1.1, 0.1))

"""总结:

arange 侧重点在于增量,不管产生多少个数

linspace 侧重于num, 即要产生多少个元素,不在乎增量

"""

# 等比数列

np.logspace(1, 4, 4, endpoint=True, base=2) # 2**1---2**4

补充拓展:python 等差数列生成器代码

典型的迭代器模式作用很简单——遍历数据结构。不过,即便不是从集合中获取元素,而 是获取序列中即时生成的下一个值时,也用得到这种基于方法的标准接口。例如,内置的 range 函数用于生成有穷整数等差数列(Arithmetic Progression,AP), itertools.count 函 数用于生成无穷等差数列。

先来看等差数列:

"""

等差数列实现。

"""

class ArithmeticProgression:

def __init__(self, begin, step, end=None):

self.begin = begin

self.step = step

self.end = end # None -> 无穷数列

def __iter__(self):

result = type(self.begin + self.step)(self.begin)

forever = self.end is None

index = 0

while forever or result < self.end:

yield result

index += 1

result = self.begin + self.step * index

if __name__ == '__main__':

ap = ArithmeticProgression(0, 1, 3)

print(ap)

# print(list(ap))

a = iter(ap)

print(next(a))

这是个简单的示例,说明了如何使用生成器函数实现特殊的 __iter__ 方法。然而,如果一个类只是为了构建生成器而去实现 __iter__ 方法,那还不如使用生成器函数。毕竟,生成器函数是制造生成器的 工厂。

def aritprog_gen(begin, step, end=None):

result = type(begin + step)(begin)

forever = end is None

index = 0

while forever or result < end:

yield result

index += 1

result = begin + step * index

使用itertools模块生成等差数列

等比数列求和python_python numpy生成等差数列、等比数列的实例

然而,itertools.count 函数从不停止,因此,如果调用 list(count()),Python 会创建一 个特别大的列表,超出可用内存,在调用失败之前,电脑会疯狂地运转。

不过,itertools.takewhile 函数则不同,它会生成一个使用另一个生成器的生成器,在指 定的条件计算结果为 False 时停止。因此,可以把这两个函数结合在一起使用,编写下述 代码:

等比数列求和python_python numpy生成等差数列、等比数列的实例

利用 takewhile 和 count 函数,写出的代码流畅而简短。

import itertools

# 注意,下面示例中的 aritprog_gen 不是生成器函数,

# 因为定义体中没有 yield 关键字。

# 但是它会返回一个生成器,

# 因此它与其他生成器函数一样,

# 也是生成器工厂函数。

def aritprog_two_gen(begin, step, end=None):

first = type(begin + step)(begin)

ap_gen = itertools.count(first, step)

if end is not None:

ap_gen = itertools.takewhile(lambda n: n < end, ap_gen)

return ap_gen

以上这篇python numpy生成等差数列、等比数列的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2020-02-25