NumPy的基础知识

基础

概念

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

2.在数组算术计算方面, NumPy 提供了大量的数学函数

3.NumPy 的底层主要用 C语言编写,因此它能够高速地执行数值计算

4.NumPy 还提供了多种数据结构,这些数据结构能够非常契合的应用在数组和矩阵的运算上

优点

NumPy 可以很便捷高效地处理大量数据,使用 NumPy 做数据处理的优点如下:

  • NumPy 是 Python 科学计算基础库
  • NumPy 可以对数组进行高效的数学运算
  • NumPy 的 ndarray 对象可以用来构建多维数组
  • NumPy 能够执行傅立叶变换与重塑多维数组形状
  • NumPy 提供了线性代数,以及随机数生成的内置函数

与python列表区别

1.NumPy 数组是同质数据类型(homogeneous),即数组中的所有元素必须是相同的数据类型。数据类型在创建数组时指定,并且数组中的所有元素都必须是该类型。

2.Python 列表是异质数据类型(heterogeneous),即列表中的元素可以是不同的数据类型。列表可以包含整数、浮点数、字符串、对象等各种类型的数据。

3.NumPy 数组提供了丰富的数学函数和操作,如矩阵运算、线性代数、傅里叶变换等。

4.Python 列表提供了基本的列表操作,如添加、删除、切片、排序等。

安装

pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple/

ndarray

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

2.ndarray 对象采用了数组的索引机制,将数组中的每个元素映射到内存块上,并且按照一定的布局对内存块进行排列,常用的布局方式有两种,即按行或者按列。

2.主要特点

  • 多维数组:ndarray 可以表示任意维度的数组,包括一维、二维、三维等。
  • 同质数据类型:ndarray 中的所有元素必须是相同的数据类型。
  • 高效内存布局:ndarray 在内存中是连续存储的,这使得数组的访问和操作非常高效。
  • 丰富的功能和方法:ndarray 提供了丰富的数学函数和操作,如矩阵运算、线性代数、傅里叶变换等。

3.使用方式

  • ndarray 是通过 array 函数或其他 NumPy 函数(如 zeros、ones、arange 等)创建的。
  • array 函数接受一个序列作为输入,并返回一个 ndarray 对象。

array创建对象

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

numpy.array(object, dtype = None, copy = True, order = None,ndmin = 0)

2.参数说明

序号 参数 描述说明
1 object 表示一个数组序列
2 dtype 可选参数,通过它可以更改数组的数据类型
3 copy 可选参数,表示数组能否被复制,默认是 True
4 order 以哪种内存布局创建数组,有 3 个可选值,分别是 C(行序列)/F(列序列)/A(默认)
5 ndmin 用于指定数组的维度

3.例

#改变数组的形状,比如:将1维数组修改未2未数组,修改后数组元素的个数和原数组相同
def np_reshape():
    arr = np.array([1,2,3,4,5,6])
    #reshape修改数组的形状,例如:(2,3)表示两行三列,修改后会返回一个新数组,不会修改元素组的维度
    #order:指定数据存储顺序,C:按行村,F:按列存
    """
       [[1 3 5]
    [2 4 6]]
       """
    # shaped_arr = arr.reshape((2,3),order='F')
    """
    [[1 2 3]
 [4 5 6]]
    """
    shaped_arr = arr.reshape((2,3),order='C')
    # shaped_arr = arr.reshape((2,4),order='C') 报错数组的元素个数不相同
    print(shaped_arr)
    print(shaped_arr.shape)#(2, 3)

    arr2 = arr.reshape((1,2,3))
    """
    [[[1 2 3]
  [4 5 6]]]
    """
    print(arr2)
    print(arr2.shape) #(1, 2, 3)

    #直接在原数组上修改形状,不是返回一个新数组
    """
    [[1 2 3]
 [4 5 6]]
    """
    arr.shape = (2,3)
    print(arr)

#定义main方法,并运行np_array
if __name__ == '__main__':
   np_array()

reshape数组变维

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

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

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

  • 例如,一个长度为6的一维数组可以被重塑为 (2, 3) 或 (3, 2),但不能被重塑为 (2, 2)。

4.案例

#改变数组的形状,比如:将1维数组修改未2未数组,修改后数组元素的个数和原数组相同
def np_reshape():
    arr = np.array([1,2,3,4,5,6])
    #reshape修改数组的形状,例如:(2,3)表示两行三列,修改后会返回一个新数组,不会修改元素组的维度
    #order:指定数据存储顺序,C:按行村,F:按列存
    """
       [[1 3 5]
    [2 4 6]]
       """
    # shaped_arr = arr.reshape((2,3),order='F')
    """
    [[1 2 3]
 [4 5 6]]
    """
    shaped_arr = arr.reshape((2,3),order='C')
    print(shaped_arr)
    print(shaped_arr.shape)#(2, 3)

    arr2 = arr.reshape((1,2,3))
    """
    [[[1 2 3]
  [4 5 6]]]
    """
    print(arr2)
    print(arr2.shape) #(1, 2, 3)

    #直接在原数组上修改形状,不是返回一个新数组
    """
    [[1 2 3]
 [4 5 6]]
    """
    arr.shape = (2,3)
    print(arr)


 #定义main方法,并运行np_array
if __name__ == '__main__':
   np_reshape()

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

def np_reshape():
    arr = np.array([1,2,3,4,5,6])
    #-1占位符,自动计算列数
    arr2 = arr.reshape(2,-1)
    """
    [[1 2 3]
 [4 5 6]]
    """
    print(arr2)
 #定义main方法,并运行np_array
if __name__ == '__main__':
   np_reshape()

数据类型

1.NumPy 提供了比 Python 更加丰富的数据类型,如下所示

序号 数据类型 语言描述
1 bool_ 布尔型数据类型(True 或者 False)
2 int_ 默认整数类型,类似于 C 语言中的 long,取值为 int32 或 int64
3 intc 和 C 语言的 int 类型一样,一般是 int32 或 int 64
4 intp 用于索引的整数类型(类似于 C 的 ssize_t,通常为 int32 或 int64)
5 int8 代表与1字节相同的8位整数。值的范围是-128到127
6 int16 代表 2 字节(16位)的整数。范围是-32768至32767
7 int32 代表 4 字节(32位)整数。范围是-2147483648至2147483647
8 int64 表示 8 字节(64位)整数。范围是-9223372036854775808至9223372036854775807
9 uint8 1字节(8位)无符号整数
10 uint16 2 字节(16位)无符号整数
11 uint32 4 字节(32位)无符号整数
12 uint64 8 字节(64位)无符号整数
13 float_ float64 类型的简写
14 float16 半精度浮点数,包括:1 个符号位,5 个指数位,10个尾数位
15 float32 单精度浮点数,包括:1 个符号位,8 个指数位,23个尾数位
16 float64 双精度浮点数,包括:1 个符号位,11 个指数位,52个尾数位
17 complex_ 复数类型,与 complex128 类型相同
18 complex64 表示实部和虚部共享 32 位的复数
19 complex128 表示实部和虚部共享 64 位的复数
20 str_ 表示字符串类型
21 string_ 表示字节串类型

 数据类型对象

1.数据类型对象(Data Type Object)又称 dtype 对象,是用来描述与数组对应的内存区域如何使用。

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

import numpy as np

# 创建一个 int32 类型的数组
arr_int = np.array([1, 2, 3], dtype=np.int32)
print(arr_int.dtype)  # 输出: int32

# 创建一个 float64 类型的数组
arr_float = np.array([1.0, 2.0, 3.0], dtype=np.float64)
print(arr_float.dtype)  # 输出: float64

2.可以使用数组的 dtype 属性来获取数组中元素的数据类型。

arr = np.array([1, 2, 3])
print(arr.dtype)  # 输出: int32

3.可以使用 astype() 方法来转换数组中元素的数据类型。

arr = np.array([1, 2, 3])
arr_float = arr.astype(np.float64)
print(arr_float.dtype)  # 输出: float64

数据类型标识码

1.NumPy 中每种数据类型都有一个唯一标识的字符码,int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替,如下所示:

字符 对应类型
b 代表布尔型
i 带符号整型
u 无符号整型
f 浮点型
c 复数浮点型
m 时间间隔(timedelta)
M datatime(日期时间)
O Python对象
S,a 字节串(S)与字符串(a)
U Unicode
V 原始数据(void)

2.以下是 NumPy 中常见的数据类型标识码及其对应的详细列表

(1)整数类型

数据类型 标识码 描述
int8 i1 8 位有符号整数
int16 i2 16 位有符号整数
int32 i4 32 位有符号整数
int64 i8 64 位有符号整数
uint8 u1 8 位无符号整数
uint16 u2 16 位无符号整数
uint32 u4 32 位无符号整数
uint64 u8 64 位无符号整数

(2)浮点数类型

数据类型 标识码 描述
float16 f2 16 位浮点数(半精度)
float32 f4 32 位浮点数(单精度)
float64 f8 64 位浮点数(双精度)

(3)复数类型

数据类型 标识码 描述
complex64 c8 64 位复数(单精度)
complex128 c16 128 位复数(双精度)

(4)布尔类型

数据类型 标识码 描述
bool b1 布尔类型

(5)字符串类型

数据类型 标识码 描述
S S10 长度为 10 的字节串
U U10 长度为 10 的 Unicode 字符串

(6)Python 对象类型

数据类型 标识码 描述
O O Python 对象类型

3.自定义一个int32的数据类型

dt=np.dtype('i4')
data = np.array([1,2,3,4],dtype=dt)
print(data)   #输出:[1 2 3 4]
print(data.dtype)	#输出:int32

#改变数组的形状,比如:将1维数组修改未2未数组,修改后数组元素的个数和原数组相同
def data_type():
    arr = np.array([1,2,3,4],dtype=np.int16)
    print(arr) # [1 2 3 4]
    print(arr.dtype) #int16

    #数据类型识别码,和numpy中的数据类型一一对应,例如:i1对应np.int8,f2对于np.float16
    arr1 = np.array([5,6,7,8],dtype='i2')
    print(arr.dtype) #int16

4.可以自定义复杂的数据结构

dt=np.dtype([('name','S10'),('age','i4')])
data = np.array([('zhangsan',20),('lisi',21)],dtype=dt)
print(data)			#输出:[(b'zhangsan&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值