np.random.rand(num)和np.random.randint(num)的区别
时间: 2024-01-13 09:19:38 浏览: 24
np.random.rand(num)和np.random.randint(num)是numpy库中用于生成随机数的两个函数,它们的区别如下:
1. np.random.rand(num)函数生成一个指定形状的[0, 1)之间均匀分布的随机数数组。参数num指定了生成的随机数的形状,可以是一个整数或一个元组。例如,np.random.rand(3, 2)将生成一个3行2列的随机数数组。
2. np.random.randint(num)函数生成一个指定范围内的随机整数数组。参数num指定了生成的随机数的范围,可以是一个整数或一个元组。例如,np.random.randint(1, 10, size=(3, 2))将生成一个3行2列的随机整数数组,范围在1到10之间。
总结起来,np.random.rand(num)生成的是[0, 1)之间的随机数,而np.random.randint(num)生成的是指定范围内的随机整数。
示例代码如下:
```python
import numpy as np
# 生成一个3行2列的[0, 1)之间均匀分布的随机数数组
random_array1 = np.random.rand(3, 2)
print(random_array1)
# 生成一个3行2列的1到10之间的随机整数数组
random_array2 = np.random.randint(1, 10, size=(3, 2))
print(random_array2)
```
相关问题
python中的np.random函数怎么用
在Python中,`np.random`模块提供了许多用于生成随机数的函数。下面是一些常用的`np.random`函数及其用法示例:
1. `np.random.rand()`: 生成一个0到1之间的随机浮点数或一个由随机浮点数组成的数组。可以通过指定维度来生成多维数组。例如:
```python
import numpy as np
# 生成一个随机浮点数
random_num = np.random.rand()
print(random_num)
# 生成一个2x3的随机浮点数数组
random_array = np.random.rand(2, 3)
print(random_array)
```
2. `np.random.randint()`: 生成一个指定范围内的整数或一个由随机整数组成的数组。可以通过指定维度来生成多维数组。例如:
```python
import numpy as np
# 生成一个0到9之间的随机整数
random_num = np.random.randint(10)
print(random_num)
# 生成一个1到10之间的随机整数数组
random_array = np.random.randint(1, 11, size=(2, 3))
print(random_array)
```
3. `np.random.choice()`: 从给定的一维数组中随机选择元素。可以指定选择的个数和是否允许重复选择。例如:
```python
import numpy as np
# 从给定数组中随机选择2个元素,允许重复选择
random_choice = np.random.choice([1, 2, 3, 4, 5], size=2, replace=True)
print(random_choice)
# 从给定数组中随机选择3个元素,不允许重复选择
random_choice = np.random.choice([1, 2, 3, 4, 5], size=3, replace=False)
print(random_choice)
```
这里仅介绍了一些常用的`np.random`函数,还有其他函数如`np.random.randn()`、`np.random.shuffle()`等,你可以根据具体需求查阅相关文档来使用。
image=np.array(grayImage,dtype=float) percent=0.001 num=int(percent*image.shape[0]*image.shape[1]) for i in range(num): temp1=np.random.randint(image.shape[0]) temp2=np.random.randint(image.shape[1]) scale=150 noise=np.random.poisson(scale,1) image[temp1][temp2]+=noise out=image if out.min()<0: low_clip=-1. else: low_clip=0. out=np.clip(out,low_clip,255) expon_image=np.uint8(out) print(expon_image.shape) cv2.imshow("expon_image",expon_image) k=cv2.waitKey(0)优化这段代码的for循环
可以使用numpy的随机函数生成随机的坐标,然后使用numpy的切片和花式索引方式对图像进行操作,可以避免使用循环。
以下是优化后的代码:
```python
import numpy as np
import cv2
grayImage = cv2.imread('test.jpg', 0)
# 转换为浮点型
image = grayImage.astype(float)
percent = 0.001
num = int(percent * image.shape[0] * image.shape[1])
# 生成随机坐标
rand_x = np.random.randint(0, image.shape[0], num)
rand_y = np.random.randint(0, image.shape[1], num)
scale = 150
noise = np.random.poisson(scale, num)
# 对图像进行操作
image[rand_x, rand_y] += noise
# 调整像素值范围
out = np.clip(image, 0, 255)
# 转换为8位整型
expon_image = out.astype(np.uint8)
print(expon_image.shape)
cv2.imshow("expon_image", expon_image)
k = cv2.waitKey(0)
```
使用numpy的切片和花式索引方式,可以避免使用循环,提高代码的效率。同时,也需要注意对图像进行操作时,需要保证图像的类型一致,避免出现类型错误的问题。