Python(numpy库)

numpy基础

NumPy 的全称是" Numeric Python",它是 Python 的第三方扩展包,主要用来计算、处理一维或多维数组

ndarray

NumPy 定义了一个 n 维数组对象,简称 ndarray 对象,它是一个一系列相同类型元素组成的数组集合。数组中的每个元素都占有大小相同的内存块,您可以使用索引或切片的方式获取数组中的每个元素。

ndarray 是通过 array 函数或其他 NumPy 函数(如 zeros、ones、arange 等)创建的。

array 函数接受一个序列作为输入,并返回一个 ndarray 对象。

array创建对象

通过 NumPy 的内置函数 array() 可以创建 ndarray 对象,其语法格式如下:

object:表示一个数组序列

dtype:可选参数,通过它可以更改数组的数据类型

copy:可选参数,表示数组能否被复制,默认是 True

order:以哪种内存布局创建数组,有 3 个可选值,分别是 C(行序列)/F(列序列)/A(默认)

ndmin:用于指定数组的维度

例子:

ndim指定/查看数组维度

数组的维度就是一个数组中的某个元素,当用数组下标表示的时候,需要用几个数字来表示才能唯一确定这个元素,这个数组就是几维

创建2维数组

reshape数组变维

reshape() 函数允许你在不改变数组数据的情况下,改变数组的维度。

reshape() 返回的是一个新的数组,原数组不会被修改。reshape() 可以用于多维数组,例如将一个一维数组重塑为二维数组。

元素总数必须匹配:新形状中的元素总数必须与原数组中的元素总数相同。

还可以直接在原数组上修改形状。

你可以使用 -1 作为占位符,让 numpy 自动计算某个维度的大小。

(2,-1)时,表示有2行,列数-1就根据元素总数来分配,如例有6个元素,所以-1的位置上便取6/2=3.

数据类型

常见的有:

bool_:布尔型数据类型(True 或者 False)

int_:默认整数类型,类似于 C 语言中的 long,取值为 int32 或 int64

int8:代表与1字节相同的8位整数。值的范围是-128到127

int16:代表 2 字节(16位)的整数。范围是-32768至32767

int32:代表 4 字节(32位)整数。范围是-2147483648至2147483647

int64:表示 8 字节(64位)整数。范围是-9223372036854775808至9223372036854775807

float_:float64 类型的简写

float16:半精度浮点数,包括:1 个符号位,5 个指数位,10个尾数位

float32:单精度浮点数,包括:1 个符号位,8 个指数位,23个尾数位

float64:双精度浮点数,包括:1 个符号位,11 个指数位,52个尾数位

complex_:复数类型,与 complex128 类型相同

complex64:表示实部和虚部共享 32 位的复数

complex128:表示实部和虚部共享 64 位的复数

str_:表示字符串类型

string_:表示字节串类型

数据类型对象

可以在创建数组时指定 dtype 参数来定义数组中元素的数据类型。

数据类型标识码

数组属性

1 shape

返回一个元组,元组中的每个元素表示数组在对应维度上的大小。元组的长度等于数组的维度数。

shape 属性功能:

未传入参数,返回一个由数组维度构成的元组

传入参数,可以用来调整数组维度的大小

2 ndim

ndim 属性功能:

返回的是数组的维数

3 itemsize

返回数组中每个元素的大小(以字节为单位

4 flags

返回 ndarray 数组的内存信息

创建数组的其他方法

1 empty()

empty() 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组(数组元素为随机值)

元素的值是随机的

2 zeros()

创建指定大小的数组,数组元素以 0 来填充

3 ones()

创建指定形状的数组,数组元素以 1 来填充

4 arange()

arange() 函数用于创建一个等差数列的数组。它类似于 Python 内置的 range() 函数,但返回的是一个 NumPy 数组而不是一个列表。

格式:

该函数有内置参数

5 linspace

在指定的数值区间内,返回均匀间隔的一维等差数组,默认均分 50 份

格式:

6 randn函数

randn生成指定数量的标准正态分布的数据,均值为1,方差为0

下列所示:随机生成10个标准正态分布的数据

下列所示:生成2行3列的标准正态分布数据。

切片

ndarray 对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样;

slice()

在 Python 中,slice 可以作为一个对象来使用。你可以创建一个 slice 对象,然后使用它来获取序列的片段。

参数:

  • start 是切片开始的位置(包含该位置)。

  • stop 是切片结束的位置(不包含该位置)。

  • step 是切片的步长,即选取元素的间隔。

高级索引

NumPy 中的高级索引指的是使用整数数组、布尔数组或者其他序列来访问数组的元素。相比于基本索引,高级索引可以访问到数组中的任意元素,并且可以用来对数组进行复杂的操作和修改。

1 整数数组索引

整数数组索引是指使用一个数组来访问另一个数组的元素。这个数组中的每个元素都是目标数组中某个维度上的索引值。

2 布尔索引

布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。

多维数组的布尔索引

例中indices 返回的是布尔结果即(True或Flase)如图:

使用逻辑运算符(如 &、|、~)组合多个条件。

广播

广播规则

维度匹配:如果两个数组的维度数不同,维度数较少的数组会在前面补上长度为 1 的维度。

长度匹配:如果两个数组在某个维度上的长度不同,但其中一个数组在该维度上的长度为 1,则该数组会沿着该维度进行广播。

不匹配:如果两个数组在某个维度上的长度既不相同也不为 1,则广播失败,抛出 ValueError。

标量与数组相加:

标量 1 被广播到与 arr 相同的形状,然后进行逐元素相加。

二维数组与一维数组相加

二维数组与二维数组相加

arr2d_broadcast 被广播到与 arr2d 相同的形状,然后进行逐元素相加。

相关推荐
ZVAyIVqt0UFji1 小时前
go-zero负载均衡实现原理
运维·开发语言·后端·golang·负载均衡
loop lee1 小时前
Nginx - 负载均衡及其配置(Balance)
java·开发语言·github
SomeB1oody2 小时前
【Rust自学】4.1. 所有权:栈内存 vs. 堆内存
开发语言·后端·rust
toto4122 小时前
线程安全与线程不安全
java·开发语言·安全
深度学习lover2 小时前
[项目代码] YOLOv8 遥感航拍飞机和船舶识别 [目标检测]
python·yolo·目标检测·计算机视觉·遥感航拍飞机和船舶识别
水木流年追梦2 小时前
【python因果库实战10】为何需要因果分析
开发语言·python
m0_675988233 小时前
Leetcode2545:根据第 K 场考试的分数排序
python·算法·leetcode
w(゚Д゚)w吓洗宝宝了3 小时前
C vs C++: 一场编程语言的演变与对比
c语言·开发语言·c++
AI人H哥会Java4 小时前
【Spring】Spring的模块架构与生态圈—Spring MVC与Spring WebFlux
java·开发语言·后端·spring·架构
开心工作室_kaic4 小时前
springboot461学生成绩分析和弱项辅助系统设计(论文+源码)_kaic
开发语言·数据库·vue.js·php·apache