引言
通过上一篇4.科学计算模块Numpy(1)概述与初始操作-CSDN博客,我们已经了解了Numpy的概念和Numpy数组的创建,今天我们来介绍一下Numpy模块中随机数的生成和ndarray属性及其创建方式。
通过阅读本篇博客,你可以:
1.掌握如何使用numpy.random模块生成随机数
2.了解ndarray数组的属性
3.掌握ndarray的多种创建方式
一、随机数的创建
numpy中的random模块包含了很多方法可以用来产生随机数,对random的一些常用方法如下图。
1.random
import numpy as np
np.random.random()
random()函数用于生成一个 [0.0, 1.0) 范围内的随机浮点数。
代码示例如下:
import numpy as np
#从[0.0,1.0)中随机生成一个浮点数
arr = np.random.random()
print(arr) # 0.5930548452162513
2.randint
import numpy as np
np.random.randint(low, high=None, size=None)
randint()函数有三个参数low、high、size,如果只输入了low,那么会随机数的范围就是[0,low)。如果输入了high,那么随机数的范围就是[low,high)。size则是指生成数的个数与维度。
代码示例如下:
import numpy as np
#生成一个3 * 4 的数组,元素是[1,10)范围中的整数
arr = np.random.randint(1, 10, size=(3, 4))
print(arr)
'''[[6 2 2 7]
[7 4 4 8]
[5 1 7 3]]'''
3.shuffle
import numpy as np
np.random.shuffle()
shuffle()函数可以对输入的数组进行原地随机排序。通俗地讲,就是打乱数组。
代码示例如下:
import numpy as np
#对数组进行打乱,原地随机排序
arr = np.array([1, 2, 3, 4, 5])
np.random.shuffle(arr)
print(arr) # [4 3 2 1 5]
4.randn
import numpy as np
np.random.randn(d0,d1,...,dn)
randn()函数是用于生成标准正态分布(均值为0,方差为1)的随机数的函数。
d0, d1, …, dn: 这些参数定义了返回数组的形状。如果指定了这些参数,randn将返回一个具有指定形状的数组。如果不指定任何参数,则返回一个标量值。
代码示例如下:
import numpy as np
#生成一个2 * 3 的数组,元素遵循标准正态分布(均值为0,方差为1)
arr = np.random.randn(2, 3)
print(arr)
"""[[ 0.73397829 1.19266785 -0.54131104]
[ 0.09698159 1.2247052 0.18207709]]
"""
5.permutation
import numpy as np
np.random.permutation(x)
permutation()函数可以用来生成随机排列。如果参数x输入的是一个数组,那么permutation会生成这个数组的随机排列。如果是一个整数,那么permutation会生成一个数组排列,元素的范围是[0,x)。
代码示例如下:
import numpy as np
# 生成数组的随机排列
arr = np.array([1, 3, 4, 5, 6, 9])
res = np.random.permutation(arr)
print(res) #[6 5 4 1 3 9]
#生成范围为[0,10)的随机排列
arr = np.random.permutation(10)
print(arr) #[1 8 3 7 2 9 6 0 5 4]
6.rand
import numpy as np
np.random.rand(d0, d1, ..., dn)
rand()函数用于生成指定形状的数组,数组中的元素服从均匀分布(均匀分布是指在指定范围内,每个数值的出现概率是相等的)。rand()函数生成的是[0,1)区间内的浮点数。
d0, d1, ..., dn:这些参数定义了返回数组的形状。如果指定了这些参数,rand将返回一个具有指定形状的数组。如果不指定任何参数,则返回一个标量值。
代码示例如下:
import numpy as np
# 生成 4 * 2 的数组,元素范围是[0,1)
arr = np.random.rand(4, 2)
print(arr)
"""[[0.02455501 0.81638666]
[0.19310181 0.899731 ]
[0.14040743 0.43266617]
[0.69985267 0.60746816]]
"""
7.seed
import numpy as np
np.random.seed(seed=None)
seed()函数是用于设置随机数生成器种子的函数,使用相同的种子可以确保每次运行程序时生成的随机数序列相同,可以确保调试和测试代码时的随机数确定而不对测试产生影响。
代码示例如下:
①设置种子并生成随机数
import numpy as np
np.random.seed(42) # 设置随机数生成器的种子
print(np.random.rand(3)) # 输出: [0.37454012 0.95071431 0.73199394]
②不设置种子,生成随机数
import numpy as np
print(np.random.rand(3)) # 可能输出: [0.2488251 0.58212728 0.77087943]
③重新设置种子
import numpy as np
np.random.seed(42)
print(np.random.rand(3)) # 输出: [0.37454012 0.95071431 0.73199394]
np.random.seed(42)
print(np.random.rand(3)) # 输出: [0.37454012 0.95071431 0.73199394]
二、ndarray数组的属性
Numpy中最重要的一个特点就是其拥有N维数组对象ndarray,它是一系列同类型数据的集合,以下标0开始的进行集合中元素的索引。
1.ndarray的内部组成
①一个指向数据(内存或内存映射文件中的一块数据)的指针。
②数据类型或dtype,描述在数组中的固定大小值的格子。
③一个表示数组形状(shape)的元组,表示各维度大小的元组。
2.ndarray重要的对象属性
①ndarray.ndim: 返回一个整数,表示数组的维度数。
import numpy as np
# 一维数组
arr1 = np.array([1, 2, 3, 4])
print(arr1.ndim) # 输出: 1
# 二维数组
arr2 = np.array([[1, 2], [3, 4]])
print(arr2.ndim) # 输出: 2
②ndarray.shape: 用于表示数组的维度信息。shape 返回一个元组,其中包含每个维度的大小(即每个轴上的元素数量)。
import numpy as np
# 一维数组
arr1 = np.array([1, 2, 3, 4])
print(arr1.shape) # 输出: (4,)
# 二维数组
arr2 = np.array([[1, 2], [3, 4]])
print(arr2.shape) # 输出: (2, 2)
③ndarray.size:用于返回数组中所有元素的总数。
import numpy as np
# 一维数组
arr1 = np.array([1, 2, 3, 4])
print(arr1.size) # 输出: 4
# 二维数组
arr2 = np.array([[1, 2], [3, 4]])
print(arr2.size) # 输出: 4
④ndarray.dtype:返回数组中元素的数据类型,可能是 NumPy 支持的各种数据类型之一,如 int32、float64、bool、str 等。
import numpy as np
# 整数数组
arr1 = np.array([1, 2, 3, 4])
print(arr1.dtype) # 输出: int64 或 int32(取决于系统)
# 浮点数组
arr2 = np.array([1.0, 2.0, 3.0, 4.0])
print(arr2.dtype) # 输出: float64
# 布尔数组
arr3 = np.array([True, False, True])
print(arr3.dtype) # 输出: bool
# 字符串数组
arr4 = np.array(['a', 'b', 'c'])
print(arr4.dtype) # 输出: <U1(表示Unicode字符,每个字符占用1个单位的空间)
# 指定数据类型
arr5 = np.array([1, 2, 3, 4], dtype=np.float32)
print(arr5.dtype) # 输出: float32
⑤ndarray.itemsize:表示数组中每个元素所占用的字节数。
import numpy as np
# 整数数组
arr1 = np.array([1, 2, 3, 4])
print(arr1.itemsize) # 输出: 8(假设是 64 位系统上,int64 类型)
# 浮点数组
arr2 = np.array([1.0, 2.0, 3.0, 4.0])
print(arr2.itemsize) # 输出: 8(float64 类型)
# 布尔数组
arr3 = np.array([True, False, True])
print(arr3.itemsize) # 输出: 1(布尔类型通常占用 1 个字节)
# 指定数据类型
arr4 = np.array([1, 2, 3, 4], dtype=np.float32)
print(arr4.itemsize) # 输出: 4(float32 类型)
# 计算数组的总内存
total_memory = arr4.size * arr4.itemsize
print(total_memory) # 输出: 16(4 个元素,每个元素占 4 个字节)
⑥ndarray.flags:提供了数组的内存布局和操作的一些信息。它是一个 numpy.flagsobj 对象,包含多个布尔标志,描述了数组的内存分布、是否可写等属性。
import numpy as np
# 创建一个 C 连续的二维数组
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr1.flags)
# 创建一个 F 连续的二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]], order='F')
print(arr2.flags)
# 创建一个数组的视图
arr3 = arr1[0:1]
print(arr3.flags)
# 修改原始数组的可写性
arr1.flags.writeable = False
print(arr1.flags)
三、ndarray的其他创建方式
ndarray数组除了可以使用底层ndarray构造器来创建外,也可以通过以下几种方式来创建。
1.zeros
import numpy as np
np.zeros(shape,dtype=float,order='C')
numpy.zeros()函数创建指定大小和形状的数组,数组元素以0来填充。shape参数用来指定数组大小和形状,dtype参数用来指定元素的数据类型,order参数用来控制数组元素在内存中的存储顺序。
代码示例如下:
import numpy as np
# 生成一个 2 * 3 的数组,元素全为0
arr = np.zeros((2, 3), dtype=float)
print(arr)
"""[[0. 0. 0.]
[0. 0. 0.]]
"""
2.zeros_like
import numpy as np
np.zeros_like(a, dtype=None, order='K')
numpy.zeros_like()函数正如它的名字一样,可以生成一个与原数组同样大小充满0的数组。order参数"K"是指保持原有顺序。
代码示例如下:
import numpy as np
arr = np.array([[1, 2, 3], [1, 2, 3]])
# 生成与原数组相同结构,元素全为0的数组
res = np.zeros_like(arr)
print(res)
"""[[0 0 0]
[0 0 0]]
"""
3.empty
import numpy as np
np.empty(shape, dtype=float, order='C')
numpy.empty()函数与zeros的效果几乎一样,唯一的区别就是在于empty创建完数组后,系统会开辟一个数组空间,数组中的元素是根据内存分配的,效率要比zeros高上许多。
代码示例如下:
import numpy as np
# 生成一个 2 * 4 大小的数组,元素是根据内存分配的
arr = np.empty((2, 4))
print(arr)
"""[[0. 0.03 0.215 0.4 ]
[0.586 0.77 0.954 1. ]]
"""
4.linspace
import numpy as np
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
numpy.linspace()函数用于创建一个一维数组,数组是一个等差数列构成的。参数效果可见下图:
代码示例如下:
import numpy as np
# 生成范围为[0,10],样本容量为5,元素类型为float,显示间距的数组
arr = np.linspace(0, 10, 5, True, True, float)
print(arr) # (array([ 0. , 2.5, 5. , 7.5, 10. ]), np.float64(2.5))
5.logspace
import numpy as np
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None, axis=0)
numpy.logspace()函数用于创建一个一维数组,数组是一个等比数列构成的。参数与linscape很相似,只有base参数与之不同。logspace中的start与stop都是以base为对数的底进行计算的。例如,start = 1 表示为 base ^ 1。
代码示例如下:
import numpy as np
# 生成范围为[2^0,2^6],样本容量为5,元素类型为float的数组
arr = np.logspace(0, 6, 5, True, 2, float)
print(arr) # [ 1. 2.82842712 8. 22.627417 64. ]
总结
本篇文章,带大家一起了解了Numpy中随机数的生成,ndarray数组的属性以及ndarray数组的多种创建方式。希望可以对大家起到帮助,谢谢。
关注我,内容持续更新(后续内容在作者专栏《从零基础到AI算法工程师》)!!!
标签:科学计算,random,print,数组,numpy,np,import,Numpy,ndarray From: https://blog.csdn.net/dxyl632956/article/details/141816216