生成随机数的函数python,python绘制复杂函数图像
本文主要介绍如何在Python中使用随机函数生成变化的图形。文中的示例代码解释得很详细,对我们的学习有一定的参考价值。你可以知道你需要什么。
鉴于上一篇文章的最后三个问题:
1.以上程序可以优化吗(比如功能相同的)?
2.创建三个实例需要三条语句。你能建立一个函数,然后输入一个数字n来自动创建n个实例吗?同时,每个实例的num_times是随机的(当n较大时,num_times应该较小)。
3.以上功能实现后,程序运行,只需输入一个参数(创建的实例数),就会自动生成相应的num_times,并调用相关函数生成相应的图表。
是的,在Rand_moving()类中,用一个乘法公式来计算每一步的方向和移动位置。
X_direction=choice([1,-1]) #x的移动方向,1向上,0不变,-1向下
X _ distance=choice ([0,1,2,3,4,5]) # x的每次移动的像素,
X_step=x_direction*x_distance #移动方向乘以移动距离,确定沿x的移动距离。
Y_direction=choice([1,-1]) #y的移动方向,1向上,0不变,-1向下
Y _ distance=choice ([0,1,2,3,4,5])# y的每一步移动的像素,
Y_step=y_direction*y_distance #移动方向乘以移动距离,确定沿y的移动距离。
所以我们可以整理出一个计算方法,可以直接调用。至于2和3,显然也是可以完成的。
第一步,提出乘法公式,形成作用于自身的方法。代码如下:
def get_step(自身,方向,距离):
返回距离*方向
定义填充_移动(自身):
而len(self . x _ values)self . num_times : #循环连续运行,直到行走包含所需点数num _ times。
X _ step=self.get_step (choice ([1,-1]),choice ([0,1,2,3,4,5]) #直接调用get_step方法,代码更简洁。
y_step=self.get_step(choice([1,-1]),choice([0,1,2,3,4,5])
完成第一个问题后,代码变得更加简洁明了。
问题2和3:
1)要生成实例数n和对应的移动次数num_times,可以考虑使用字典,即实例数是key,对应的移动次数num_times是key值。当输入2时,如case list={1 3360 150000 , 2 3360 250000}
2)读取字典中的每一项,将对应的键和值传递给Rand_moving类创建的实例。关键点的数量是要创建的实例的数量,对应的值是移动的数量。
3)输入一个数字,即字典键的个数,并存储在字典中。同时用一个随机函数生成一个num_times并存储在相应的值中。
完整的想法:
1.重新定义一个类New_case()。功能:接收一个数据,根据这个数据自动生成一个字典。
类New_case():
#定义New_case类
Def _ _ init _ _ (self,numbers) : #定义要创建的实例数量
自我数字=数字
Self.caselist={} #定义一个空的caselist字典
self.case=0
而self . cases self . numbers : #变量case小于给定值时,
self.case=1
Times=choice ([100,000,150,000,200,000,250,000]) #随机选择若干步棋
self . caselist[self . case]=times #将值与键匹配。
2.需要循环读取字典的键和值,并将值传递给类Rand_moving,然后运行fill_moving()生成。
数据并保存到列表,随即用plt.scatter()进行绘图
for key,value in self.caselist.items(): #字典不为空colorkey=str(key) # 将字典关键字转为字符串存到变量colorkey中
examplecase = Rand_moving(int(value)) #创建实例,将对应的value值传递类Rand_moving
examplecase.fill_moving() #调用类Rand_moving中的方法fill_moving()计算移动相关数据并保存到列表中
plt.figure(dpi=128,figsize=(12, 10)) #创建画面屏幕
plt.scatter(examplecase.x_values,examplecase.y_values,c=self.colors[colorkey],s=15)
plt.show()
上篇中的代码 c=y_values, cmap=plt.cm.Reds为什么这里不再用,是因为这里循环的时候一直出现红色Reds,为了对比,创建了一新字典colors{},将生成的个数与颜色相对应。所以上述代码中修改为 c=self.colors[colorkey]
类New_case()全部代码如下:
import matplotlib.pyplot as pltfrom rand_moving import *
class New_case():
#定义New_case类
def __init__(self,numbers): #定义要创建的实例个数
self.numbers=numbers
self.caselist={} #定义一个空的cases列表
self.case = 0 #定义一个case变量
self.colors={1:red,2:orange,3:yellow,4:green,5:blue,6:puple}#创建了一新字典colors{},将生成的个数与颜色相对应
while self.case < self.numbers: #小于给定实例个数时
self.case += 1
times = choice([100000,150000,200000,250000]) #随机生成一个移动次数
self.caselist[self.case] = times #将变量case作为key, times作为value保存到字典中
def case_moving(self): #重新定义一个方法,即访问字典所有项
for key,value in self.caselist.items(): #字典不为空
colorkey=str(key) # 将字典关键字转为字符串存到变量colorkey中
examplecase = Rand_moving(int(value)) #创建实例,将对应的value值传递类Rand_moving
examplecase.fill_moving() #调用类Rand_moving中的方法fill_moving()计算移动相关数据并保存到列表中
plt.figure(dpi=128,figsize=(12, 10)) #创建画面屏幕
plt.scatter(examplecase.x_values,examplecase.y_values,c=self.colors[colorkey],s=15)#注意调用了上述新字典的颜色
plt.show()
3、主程序
主程序中有一个交互,需要输入一个数据,然后调用相关相关类创建实例(慢慢成调包侠了!^v^)
import matplotlib.pyplot as pltfrom rand_moving import *
from new_case import *
print("Please enter the number:") #交互,请输入一个数,模拟运行,不需要太大的数据。
n = input() #将输入的数据保存到变量n中,注意所有输入均为字符串,
testcase = New_case(int(n)) #将n转为整型数据,创建实例个数
testcase.case_moving()
实际运行效果,输入4,生成4个数据图形(为展示较全,原图已缩小):
self.colors={'1':'red','2':'orange','3':'yellow','4':'green','5':'blue','6':'puple'}注意:图的颜色分别与colors字典中对应。
当然如果觉得数轴很碍眼,那就在类类New_case()中的plt.figure()之后加上
plt.axes().get_xaxis().set_visible(False)plt.axes().get_yaxis().set_visible(False)
到此这篇关于Python利用随机函数生成变化图形详解的文章就介绍到这了,更多相关Python随机函数生成变化图形内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。