笔记 | numpy-06.从数值范围创建数组

本文详细介绍了NumPy库中的arange、linspace和logspace函数,用于创建等差、等比数列。通过实例展示了如何设置起始值、终止值、步长和数据类型,以及如何调整等差数列和等比数列的参数。这些函数在数值计算和数据分析中有着广泛应用。
摘要由CSDN通过智能技术生成
#%% md
## numpy.arange
numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象
#%%
# numpy.arange(start, stop, step, dtype)
"""
参数	描述
start	起始值,默认为0
stop	终止值(不包含)
step	步长,默认为1
dtype	返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。
"""
#%%
import numpy as np

x = np.arange(5) # 0~5 (不含5) | [0, 1, 2, 3, 4] | 生成 0 到 5 的数组
x # 5r1c
#%%
import numpy as np

x = np.arange(5, dtype=float) # 设置返回类型位 float:
x # 5r1c
#%%
import numpy as np

x = np.arange(10, 20, 2)  # 10~20 (不含20),步长2 | [10, 12, 14, 16, 18, ]
x # 5r1c
#%% md
## numpy.linspace
numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的
#%%
# https://baike.baidu.com/item/等差数列/1129192
# 例如: 1,3,5,7,9……2n-1
# 通项公式: an = a1 + (n-1) * d
# 首项 a1 = 1 公差 d = 2
# 前n项和公式为: Sn = a1 * n + [n * (n-1) *d] / 2 或 Sn = [n * (a1 + an)] / 2 (n均属于正整数)
#%%
# np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
"""
参数	描述
start	序列的起始值
stop	序列的终止值,如果endpoint为true,该值包含于数列中
num	要生成的等步长的样本数量,默认为50
endpoint	该值为 true 时,数列中包含stop值,反之不包含,默认是True。
retstep	如果为 True 时,生成的数组中会显示间距,反之不显示。
dtype	ndarray 的数据类型
"""
#%%
import numpy as np
a = np.linspace(1, 10, 10) # 1~10,平均切10份 | endpoint默认True, 即包含终止值 | 这里公差 d=1
a # 10r1c
#%%
import numpy as np
a = np.linspace(1, 1, 10) # 设置元素全部是1的等差数列 | 浮点数 | 这里公差 d=0
a
#%%
# 将 endpoint 设为 false,不包含终止值
import numpy as np

a = np.linspace(10, 20, 5, endpoint=False) # d = 2
a # 5r1c
#%%
import numpy as np

a = np.linspace(10, 20, 5) # 将 endpoint 设为 true,则会包含 20 | d = 2.5
a # 5r1c
#%%
# 设置间距
import numpy as np
a = np.linspace(1, 10, 10, retstep=True)
a
#%%
b = np.linspace(1, 10, 10).reshape((10, 1))
b # 10r1c
#%% md
## numpy.logspace
numpy.logspace 函数用于创建一个于等比数列
#%%
# https://baike.baidu.com/item/等比数列/1129457
# 等比数列是指从第二项起, 每一项与它的前一项的比值等于同一个常数的一种数列, 常用G、P表示
# 这个常数叫做等比数列的公比, 公比通常用字母q表示(q≠0), 等比数列 a1≠ 0 其中{an}中的每一项均不为0. 注:q=1 时,an为常数列
# 国王对这种新奇的游戏很快就产生了浓厚的兴趣,高兴之余,他便问那位宰相,作为对他忠心的奖赏,他需要得到什么赏赐.
# 宰相开口说道:请您在棋盘上的第一个格子上放1粒麦子,第二个格子上放2粒,第三个格子上放4粒,第四个格子上放8粒……即每一个次序在后的格子中放的麦粒都必须是前一个格子麦粒数目的两倍,直到最后一个格子第64格放满为止,这样我就十分满足了
#%%
# np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
"""
参数	描述
start	序列的起始值为:base ** start
stop	序列的终止值为:base ** stop。如果endpoint为true,该值包含于数列中
num	要生成的等步长的样本数量,默认为50
endpoint	该值为 true 时,数列中中包含stop值,反之不包含,默认是True。
base	对数 log 的底数。
dtype	ndarray 的数据类型
"""
#%%
import numpy as np
x = np.linspace(1, 2, 10) # 等差数列
x
#%%
import numpy as np
# 默认底数 10
print([(_.round(6), (10 ** _).round(6)) for _ in x]) # 对数 | 需要以等差数列为依据进行遍历计算
a = np.logspace(1.0, 2.0, num=10)
a
#%%
import numpy as np
import math
# 将对数的底数设置为 2

print([(_, 2 ** _) for _ in range(10)]) # 对数
a = np.logspace(0, 9, 10, base=2) #
a
#%%
# 等差数列-总结
# 公差 =(末项-首项)/ (项数-1)
# 第n项 = 首项 + (项数-1) * 公差
# 项数 = (末项-首项) / 公差 + 1
# 如: 末项(s2)=2, 首项(s1)=1, 项数(n)=10,
# print((2-1) / (10 - 1)) # 0.1111111111111111
# 如: 末项(s2)=9, 首项(s1)=0, 项数(n)=10
# print((9-0) / (10 - 1))

# 公差:d, 首项:s1, 末项: s2, 项数: n, 第n项: an

def linspace_d(s1, s2, n):
    return (s2 - s1) / (n - 1)

def linspace_an(s1, n, d):
    return s1 + (n - 1) * d

def linespace_n(s1, s2, d):
    return (s2 - s1) / d + 1

d = linspace_d(1, 2, 10)
print(d)
an = s2 = linspace_an(1, 10, d)
print(an)
n = linespace_n(1, 2, d)
print(n)
#%%
# 等比数列-总结
# 例题
# 某人存入银行a元, 存期5年, 年利率r, 那么按照复利, 5年末的到本利和是?
# 存入 a元
# 第一年末: a + ar = a(1+r) 元
# 第二年末: a(1+r) + a(1+r)r = a(1+r)(1+r) = a((1+r)**2) 元
# 第三年末: a((1+r)**2) + a((1+r)**2)r = a((1+r)**2)(1+r) = a((1+r)**3) 元
# 第四年末: a((1+r)**3) + a((1+r)**3)r = a((1+r)**3)(1+r) = a((1+r)**4) 元
# 第五年末: a((1+r)**4) + a((1+r)**4)r = a((1+r)**4)(1+r) = a((1+r)**5) 元
# 每一项与它的前一项的比值等于同一个常数的一种数列
#%%
# 计算公式-等差数列
d = linspace_d(1, 2, 10) # 公差
print([(_, 1+ round(_ * d, 6)) for _ in range(10)]) # 构建等差数列
linspace = np.linspace(1, 2, 10)
linspace
#%%
# 计算公式-等比数列
print([(round(_, 6), round(10 ** _, 6)) for _ in linspace]) # 使用等差数列进行求等比
np.logspace(1, 2, 10, )
#%%

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CY3761

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值