如何利用python中的威布尔分布numpy.random.weibull()函数生成三参数的随机数序列

作者&投稿:检秋 (若有异议请与网页底部的电邮联系)
python是函数式编程语言吗~

函数式编程是使用一系列函数去解决问题,按照一般编程思维,面对问题时我们的思考方式是“怎么干”,而函数函数式编程的思考方式是我要“干什么”。 至于函数式编程的特点暂不总结,我们直接拿例子来体会什么是函数式编程。


lambda表达式(匿名函数):



普通函数与匿名函数的定义方式:


#普通函数
def add(a,b):
return a + b

print add(2,3)


#匿名函数
add = lambda a,b : a + b
print add(2,3)


#========输出===========
5
5




  匿名函数的命名规则,用lamdba 关键字标识,冒号(:)左侧表示函数接收的参数(a,b) ,冒号(:)右侧表示函数的返回值(a+b)。

  因为lamdba在创建时不需要命名,所以,叫匿名函数^_^





Map函数:



计算字符串长度


abc = ['com','fnng','cnblogs']

for i in range(len(abc)):
print len(abc[i])

#========输出===========
3
4
7





定义abc字符串数组,计算abc长度然后循环输出数组中每个字符串的长度。

来看看map()函数是如何来实现这个过程的。


abc_len = map(len,['hao','fnng','cnblogs'])

print abc_len

#========输出===========
[3, 4, 7]



虽然,输出的结果中是一样的,但它们的形式不同,第一种是单纯的数值了,map()函数的输出仍然保持了数组的格式。



大小写转换;

python提供有了,upper() 和 lower() 来转换大小写。


#大小写转换
ss='hello WORLD!'
print ss.upper() #转换成大写
print ss.lower() #转换成小写

#========输出===========
HELLO WORLD!
hello world!




通过map()函数转换:


def to_lower(item):
return item.lower()

name = map(to_lower,['cOm','FNng','cnBLoGs'])
print name

#========输出===========
['com', 'fnng', 'cnblogs']



  这个例子中我们可以看到,我们写义了一个函数toUpper,这个函数没有改变传进来的值,只是把传进来的值做个简单的操作,然后返回。然后,我们把其用在map函数中,就可以很清楚地描述出我们想要干什么。

再来看看普通的方式是如何实现字符串大小写转换的:


abc = ['cOm','FNng','cnBLoGs']
lowname = []

for i in range(len(abc)):
lowname.append(abc[i].lower())

print lowname

#========输出===========
['hao', 'fnng', 'cnblogs']





map()函数加上lambda表达式(匿名函数)可以实现更强大的功能。


#求平方
#0*0,1*1,2*2,3*3,....8*8
squares = map(lambda x : x*x ,range(9))
print squares

#========输出===========
[0, 1, 4, 9, 16, 25, 36, 49, 64]







Reduce函数:




def add(a,b):
return a+b

add = reduce(add,[2,3,4])
print add

#========输出===========
9




  对于Reduce函数每次是需要对两个数据进行处理的,首选取2 和3 ,通过add函数相加之后得到5,接着拿5和4 ,再由add函数处理,最终得到9 。

  在前面map函数例子中我们可以看到,map函数是每次只对一个数据进行处理。



  然后,我们发现通过Reduce函数加lambda表达式式实现阶乘是如何简单:


#5阶乘
#5!=1*2*3*4*5
print reduce(lambda x,y: x*y, range(1,6))

#========输出===========
120







  Python中的除了map和reduce外,还有一些别的如filter, find, all, any的函数做辅助(其它函数式的语言也有),可以让你的代码更简洁,更易读。 我们再来看一个比较复杂的例子:




#计算数组中正整数的值

number =[2, -5, 9, -7, 2, 5, 4, -1, 0, -3, 8]
count = 0
sum = 0

for i in range(len(number)):
if number[i]>0:
count += 1
sum += number[i]

print sum,count

if count>0:
average = sum/count

print average

#========输出===========
30 6
5




如果用函数式编程,这个例子可以写成这样:


number =[2, -5, 9, -7, 2, 5, 4, -1, 0, -3, 8]

sum = filter(lambda x: x>0, number)

average = reduce(lambda x,y: x+y, sum)/len(sum)

print average

#========输出===========
5






最后我们可以看到,函数式编程有如下好处:

1)代码更简单了。
2)数据集,操作,返回值都放到了一起。
3)你在读代码的时候,没有了循环体,于是就可以少了些临时变量,以及变量倒来倒去逻辑。
4)你的代码变成了在描述你要干什么,而不是怎么去干。

def add(a,b): # 定义名称为add()的函数,并有两个参数 a, b z=a+b # 对传入的数据进行相加操作 return z # 函数一般都会有返回值,本函数返回 a+badd(1,3) # 调用add()函数,并传入 1,3 两个参数 # 那么讲返回 1+3 的结果, 也就是 add(1,3) == 4# print(add()) 这样是返回add()的结果,由于没有参数,所以会报错print(add(1,3)) # 将返回 4
看你提的这种问题,函数是每种语言很基础的东西。
你应该没有学过其他编程语言吧,如果你想深入学习语言编程的话,并不建议你将python作为入门语言。
至于原因吗:①python是脚本语言,或者说是解释型语言,与C,C++等编译型语言还是有些差别的 ②python是弱类型语言,变量的声明不用说明类型。这样并不能深入的体会指定类型带来的好处 ③入门语言还是建议从C语言开始。能更深入的体会底层的一些东西
当你学完C再使用python的时候,你会感觉你想要的功能基本都有相应的模块了。导入之后,稍微写点代码就能得到你想要的结果。

当然,并不是说python不好,正是因为python太方便,所以并不适合作为编程入门语言。

给你推荐点python教程吧, 一个视频一个文字,算是入门级别的吧
http://wenku.baidu.com/course/view/dca3bc64783e0912a2162a8f?cid=512
http://sebug.net/paper/python/
还有不要忘记官方文档
https://www.python.org/doc/

你好,有两个办法:

一个是自己写一个函数

def Nweibull(a,size, scale)

     return scale*numpy.random.weibull(a,size)

另外一个是换一个库, 用scipy.stats.weibull_min, 他需要三个参数:

from scipy.stats import weibull_min
n = 100     # number of samples
k = 2.4     # shape
lam = 5  # scale
x = weibull_min.rvs(k, loc=0, scale=lam, size=n)