Python——random

预备备

首先使用random函数之前需要先导入random模块

import random

random.random()

random.random()不需要参数,会生成0-1之间的随机数,生成的随机数小数点后位数在15-18位之间,我运行了几次暂时没有看到不在这个区间的。

for i in range(10):
    a = random.random()  # 重点标记
    print(a, end='   ')
    print(len(str(a)[2:]))  # 计算生成的随机数是小数点后有多少位
运行结果:
0.27335015371074467   17
0.5623481596080516   16
0.016844202005072417   18
0.7528070130456832   16
0.7407135450665351   16
0.45346895355857786   17
0.861146208501261   15
0.17156667452663998   17
0.5892867120392307   16
0.40453104035795007   17

random.randint(int, int)

random.randint()需要两个int类型的参数,形成一个区间,生成的随机数为这个区间内的整数,既包含第一个参数,也包含第二个参数。

for i in range(10):
    print(random.randint(0, 9), end='  ')
运行结果:
5  8  8  4  5  8  5  0  6  9  

参数可以是负值

for i in range(10):
    print(random.randint(-5, 1), end='  ')
运行结果:
-4  0  -5  -1  -5  1  -4  -5  -3  -2  

但前一个参数不能大于后一个参数,否则会报错(可以等于)

for i in range(10):
    print(random.randint(5, 1), end='  ')

Traceback (most recent call last): File
“E:\ReRAM_ReWrite\multithreading\one-dim.py”, line 8, in
print(random.randint(5, 1), end=’ ') File “C:\Users\11265\AppData\Local\Programs\Python\Python39\lib\random.py”,
line 339, in randint
return self.randrange(a, b+1) File “C:\Users\11265\AppData\Local\Programs\Python\Python39\lib\random.py”,
line 317, in randrange
raise ValueError(“empty range for randrange() (%d, %d, %d)” % (istart, istop, width)) ValueError: empty range for randrange() (5, 2,
-3)

根据他的返回函数也可以看出来生成的随机数既包含第一个参数,也包含第二个参数。

random.seed(a)

当你在random函数之前先设置random.seed(a)时,random函数会根据你所给的seed参数的hash值产生一个随机数,参数a可以是None, int, float, str, bytes, and bytearray 等类型,只要是可以hash的类型都可以.

只要你random.seed中的参数不变,它的hash值就不变,产生的随机数就不变,就算是两个不同的程序seed里用了同一个参数并用相同的随机函数,产生的随机数也是一样的,用法如下:

for j in range(5):
    random.seed(1)
    print(random.randint(0, 9), end='  ')
    random.seed(2)
    print(random.randint(0, 9), end='  ')
    print('end')  # 多写了一个print是为了换行
运行结果:
2  0  end
2  0  end
2  0  end
2  0  end
2  0  end

把第一个seed参数改成5,第二个不变

for j in range(5):
    random.seed(5)
    print(random.randint(0, 9), end='  ')
    random.seed(2)
    print(random.randint(0, 9), end='  ')
    print('end')
实验结果:
9  0  end
9  0  end
9  0  end
9  0  end
9  0  end

可以看到seed参数为2时和前面一个程序产生的seed为2 的随机数相同都是0
另外random.seed后面跟的也可以是random.random()等函数。

当我知道seed是基于hash值的时候,我去百度了Python 中什么数据类型可以hash,上面写着不可变数据类型都可以,所以说元组也是可以的,然后我试了一下

t = (1, 4, 5)
for j in range(5):
    random.seed(t)
    print(random.randint(0, 9), end='  ')
    random.seed(2)
7  7  7  7  7 
DeprecationWarning: Seeding based on hashing is deprecated since Python 3.9 and will be
 removed in a subsequent version. The only supported seed types are: None, int, float, str, 
 bytes, and bytearray.
  random.seed(t)

元组确实可以,但同时也给出了警告,基于hash的seed自Python 3.9起已弃用,并将在后续版本中移除。

random还有很多有趣的函数啊,有时间我再接着写。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Kmeans聚类算法是一种无监督学习算法,用于将数据集划分为不同的簇。它是一个迭代算法,通过计算每个数据点与簇中心的距离,将数据点分配到最近的簇中心。然后,根据分配的数据点更新簇中心。重复这个过程,直到簇中心不再变化或达到预设的迭代次数。 下面是一个使用Python实现Kmeans聚类算法的示例: ``` python import numpy as np import matplotlib.pyplot as plt # 生成随机数据 np.random.seed(0) X = np.random.randn(100, 2) # 初始化K个簇中心 K = 3 centers = X[np.random.choice(len(X), K, replace=False)] # 迭代聚类 for i in range(10): # 计算每个数据点最近的簇中心 distances = np.linalg.norm(X[:, np.newaxis, :] - centers, axis=2) labels = np.argmin(distances, axis=1) # 更新簇中心 for k in range(K): centers[k] = np.mean(X[labels == k], axis=0) # 可视化聚类结果 colors = ['r', 'g', 'b'] for k in range(K): plt.scatter(X[labels == k, 0], X[labels == k, 1], c=colors[k]) plt.scatter(centers[:, 0], centers[:, 1], marker='*', s=200, c='#050505') plt.show() ``` 在这个例子中,我们生成了一个随机数据集,然后初始化了3个簇中心。然后,我们执行10次迭代,计算每个数据点最近的簇中心,并根据分配的数据点更新簇中心。最后,我们可视化聚类结果,其中每个簇用不同的颜色表示,簇中心用星号表示。 Kmeans聚类算法是一种简单有效的聚类算法,但它有一些缺点。例如,它需要预先指定簇的数量K,这可能不是很容易确定。此外,它对初始簇中心的选择很敏感,可能会导致陷入局部最优解。因此,在实际应用中,需要对它进行改进,例如Kmeans++算法和层次聚类算法等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值