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 相同的形状,然后进行逐元素相加。