首页 > 其他分享 >5.科学计算模块Numpy(2)随机数的生成和ndarray属性及其创建方式

5.科学计算模块Numpy(2)随机数的生成和ndarray属性及其创建方式

时间:2024-09-05 08:53:01浏览次数:10  
标签:科学计算 random print 数组 numpy np import Numpy ndarray

引言

通过上一篇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

相关文章

  • 【机器学习】嘿马机器学习(科学计算库)第8篇:Pandas,学习目标【附代码文档】
    本教程的知识点为:机器学习(常用科学计算库的使用)基础定位机器学习概述机器学习概述1.5机器学习算法分类1监督学习机器学习概述1.7Azure机器学习模型搭建实验Azure平台简介Matplotlib3.2基础绘图功能—以折线图为例1完善原始折线图—给图形添加辅助功能M......
  • NumPyro入门API和开发人员参考 pyro分布推理效果处理程序贡献代码更改日志入门教程使
    NumPyro文档¶NumPyro入门API和开发人员参考烟火元素分布推理效果处理程序贡献代码更改日志入门教程使用NumPyro的贝叶斯回归贝叶斯分层线性回归例如:棒球击球率示例:变型自动编码器例子:尼尔的漏斗例子:随机波动例如:亚麻和俳句可变推断参数化NumPyro模型的自动绘制不良后几何及......
  • 使用numpy快速实现统计分析的常用代码实现
    文末赠免费精品编程资料~~NumPy是Python编程语言中用于数值计算的核心库之一,在统计分析方面,它也提供了各种各样的函数来实现统计分析。NumPy统计分析功能概览基本统计量:计算平均值、中位数、众数、标准差、方差等。 排序和搜索:排序数组、查找最大值、最小值、百分位......
  • NumPy 随机数据分布与 Seaborn 可视化详解
    随机数据分布什么是数据分布?数据分布是指数据集中所有可能值出现的频率,并用概率来表示。它描述了数据取值的可能性。在统计学和数据科学中,数据分布是分析数据的重要基础。NumPy中的随机分布NumPy的random模块提供了多种方法来生成服从不同分布的随机数。生成离散分布随机......
  • 组合分类器基础实验——numpy实现或sklearn借口调用:袋装Bagging, 随机森林, 提升Boost
    袋装(Bagging)基本思想对原训练数据集采用随机有放回抽样的方法选择子数据集从而构造组合分类器。给定含有n个样本的数据集合D,袋装在构造指定的T个基础模型(以基分类器为例)的基本过程:对D进行采样,得到若干个大小相同子数据集Di(i=1,2,…,T),Di中可能包含重复样本(因为对每个Di采用的......
  • 用Python爬取地图信息被捕了?Python主要有哪些用途:Web开发、数据科学和人工智能、科学
    近日,一起关于导航电子地图“拥堵延时指数”数据权益的不正当竞争纠纷案在北京市朝阳区人民法院落下帷幕,引发热议。 爬虫确实是学习Python最有意思的一件事情,也是Python很擅长的事情之一。很多铁铁日常使用Python爬天爬地,也还有很多想学爬虫来自动获取数据。如果你正在学习......
  • Python学习-[numpy库]-初级
    创建数组:np.array([1,2,3,4,5])使用zeros创建全零数组:np.zeros((3,2))代表一个三行二列的数组:array([0.,0.], [0.,0.], [0.,0.])获取数组的尺寸:a=np.zeros((3,2))a.shape#输出结果为:(3,2)第一个数据展示数组第一维的长度,第二个数据展示数......
  • Numpy库
    一、NumPy介绍在Python中,NumPy是一个开源的数值计算扩展库,用于高效地处理大型多维数组和矩阵,同时提供了大量的数学函数库进行这些数组的操作。NumPy库在科学计算,数据分析,机器学习中有广泛应用。二、安装NumPy1pipinstallnumpy2.1安装完NumPy后,你需要在Python脚本中导入......
  • 云服务器配置Yolov5环境,No module named ‘torch‘, No module named ‘numpy
    客户背景因为电脑GPU不行,所以想使用云服务器跑Yolov5,但是云服务器配置环境有冲突,需要解决;报错:Nomodulenamed'torch',Nomodulenamed'numpy阿里云配置1.阿里云资费情况2.选择系统和安装GPU启动3.选择网络速度(上行下行的速度),之后确认订单就可以了。云服务器......
  • numpy_torch_basic
    importnumpyasnpCreatearr1=np.array([1.,2.,3.])arr1array([1.,2.,3.])arr2=arr1.astype(int)arr2array([1,2,3])arr3=np.ones((3,2,1))arr3array([[[1.],[1.]],[[1.],[1.]],[[1.],[1.]]])a=......