Numpy 基础

Numpy 基础

  1. Numpy(Numerical Python)是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算。
  2. 安装 NumPy 最简单的方法就是使用 pip 工具: pip install numpy
  3. Numpy常用的导入格式:import numpy as np

一、创建数组对象

  • 定义:在NumPy中,数组对象是一个多维的、同质的数值容器,称为 ndarray 对象。
  • 创建数组:可以通过 numpy.array() 函数从Python列表或元组创建数组。
  • array() 函数的格式为:
numpy.array(object, dtype = None, ndmin = None)

object :对象

dtype :数据类型,可选

ndmin :整数,指定生成数组的最小维度。

创建数组

import numpy as np
 # 从列表创建数组
arr = np.array([1, 2, 3, 4])  # 一维数组
arr2 = np.array([[1, 2], [3, 4]])  # 二维数组

创建数组对象

使用函数创建数组

import numpy as np
zeros_arr = np.zeros((3, 4))  # 3行4列的全零数组
ones_arr = np.ones((2, 3))    # 2行3列的全1数组
empty_arr = np.empty((2, 2))  # 创建空数组(内容随机)
arange_arr = np.arange(0, 10, 2)  # 从0到10(不包括10),步长为2
linspace_arr = np.linspace(0, 10, 5)  # 在0到10之间生成5个等间距的数

二、数组的属性 (arr是某个数组的变量名)

  • 形状

arr.shape # 返回数组的维度,以元组类型输出

  • 维度

arr.ndim # 返回数组的维度数

  • 数据类型

arr.dtype # 返回数组中元素的数据类型

  • 大小

arr.size # 返回数组中元素的总数

三、数组的索引与切片

一维数组

import numpy as np
arr = np.array([10, 20, 30, 40, 50])
print(arr[0])       # 第一个元素:10
print(arr[-1])      # 最后一个元素:50
print(arr[1:4])     # 切片:20, 30, 40(左闭右开,不包含索引4)
print(arr[::2])     # 步长2:10, 30, 50(从0开始)
print(arr[1::2])    # 从索引1开始,步长2: 20, 40

多维数组

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 访问单个元素:行索引0,列索引2 → 3
print(arr[0, 2])    # 3
# 切片:取前两行,中间一列(列索引1)
print(arr[:2, 1])   # [2 5]
# 取所有行,第0和2列(注意用列表指定列)
print(arr[:, [0, 2]])
# 输出:
# [[1 3]
#  [4 6]
#  [7 9]]

布尔索引(关键:用布尔数组筛选元素)

import numpy as np
arr = np.array([10, 20, 30, 40, 50])
mask = arr > 25     # 生成布尔数组:[False, False, True, True, True]
print(arr[mask])    # [30 40 50]

# 复杂条件:同时满足>20且<50
print(arr[(arr > 20) & (arr < 50)])  # [30 40](注意用&而非and)

花式索引(用整数数组指定索引)

import numpy as np
arr = np.array([[1, 2], [3, 4], [5, 6]])
rows = np.array([0, 2, 1])  # 行索引
cols = np.array([1, 0, 1])  # 列索引
print(arr[rows, cols])      # 按坐标(0,1),(2,0),(1,1)取值 → [2, 5, 4]

四、数组运算

算数运算(逐元素运算,无需循环)

import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b)    # [5 7 9](对应元素相加)
# 二维矩阵乘法(需区分逐元素乘和矩阵乘)
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
print(A * B)    
# 逐元素乘(Hadamard积):
# [[ 5 12]
#  [21 32]]
print(A @ B)    
# 矩阵乘法(等价于np.dot(A, B)):
# [[19 22]
#  [43 50]]

广播机制(自动扩展维度适配运算)

import numpy as np
# 一维数组与标量运算(标量视为形状(1,)的数组)
arr = np.array([1, 2, 3])
print(arr + 5)    # [6 7 8](广播5为[5,5,5])

# 二维数组与一维数组运算(列方向对齐)
matrix = np.array([[1, 2, 3], [4, 5, 6]])
vector = np.array([10, 20, 30])
print(matrix + vector)  
# 逐行加vector:
# [[11 22 33]
#  [14 25 36]]

比较运算(返回布尔数组)

import numpy as np
arr = np.array([10, 20, 30, 40])
print(arr > 25)    # [False False  True  True]
print(arr == 20)   # [False  True False False]

聚合函数(对数组元素进行统计)

import numpy as np
# 按轴聚合(以二维数组为例,axis=0为列,axis=1为行)
matrix = np.array([[1, 2], [3, 4]])
print(np.sum(matrix, axis=0))   # 列求和:[4, 6]
print(np.mean(matrix, axis=1))  # 行平均:[1.5, 3.5]

示例: arr=np.array ([1,3,5,7])

函数说明结果
np.sum()求和16
np.mean()平均值4
np.max()最大值7
np.min()最小值1
np.std()标准差2.5819889
np.argmax()最大值索引3

五、数组变形与维度操作

改变形状(不改变数据,返回新数组)

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6])
# 转为2行3列
reshaped_arr = arr.reshape((2, 3))
print(reshaped_arr)
# [[1 2 3]
#  [4 5 6]]
# 自动计算维度(-1表示自动推导)
auto_arr = arr.reshape((-1, 2))  # 3行2列(6/2=3)

展平数组(一维化)

import numpy as np
arr = np.array([[1, 2], [3, 4]])
flat_arr1 = arr.ravel()    # 展平,返回视图(与原数组共享数据)
flat_arr2 = arr.flatten()  # 展平,返回拷贝到新变量中(独立数据)

调整维度(增加 / 减少维度)

import numpy as np
arr = np.array([1, 2, 3])

# 增加维度:转为列向量(形状(3,1))
col_vec = arr[:, np.newaxis]  # 等价于np.expand_dims(arr, axis=1)

# 减少维度:移除大小为1的维度
arr_3d = np.array([[[1], [2]]])
squeezed_arr = arr_3d.squeeze()  # 转为[1, 2](形状从(1,2,1)变为(2,))

转置(交换轴,常用于矩阵转置)

import numpy as np
matrix = np.array([[1, 2, 3], [4, 5, 6]])
transposed = matrix.T  # 转置,形状从(2,3)变为(3,2)

六、数组拼接与分割

拼接数组(concatenate,可指定轴)

import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])

# 按行拼接(axis=0,等价于vstack)
row_concat = np.concatenate((a, b), axis=0)
# [[1 2]
#  [3 4]
#  [5 6]
#  [7 8]]

# 按列拼接(axis=1,等价于hstack)
col_concat = np.concatenate((a, b), axis=1)
# [[1 2 5 6]
#  [3 4 7 8]]

分割数组(split,指定轴和分割点)

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])

# 按行平均分割为2部分(axis=0)
split_rows = np.split(arr, 2, axis=0)
# [array([[1, 2, 3],
#         [4, 5, 6]]),
#  array([[ 7,  8,  9],
#         [10, 11, 12]])]

# 按列指定位置分割(分割点[1,2],分成3部分)
split_cols = np.split(arr, [1, 2], axis=1)
# [array([[ 1],
#         [ 4],
#         [ 7],
#         [10]]),
#  array([[ 2],
#         [ 5],
#         [ 8],
#         [11]]),
#  array([[ 3],
#         [ 6],
#         [ 9],
#         [12]])]

七、随机数生成:数据模拟必备

常用随机数函数

函数说明示例
np.random.rand()生成 [0, 1) 区间内的均匀分布随机数,形状由参数指定np.random.rand(2, 3) → 生成形状为 (2, 3) 的二维数组(元素在 0~1 之间)
np.random.randn()生成标准正态分布(均值 0,标准差 1)的随机数np.random.randn(5) → 生成包含 5 个服从 N(0, 1) 分布的一维数组
np.random.randint(low, high=None, size=None)生成 [low, high) 区间内的随机整数,形状由 size 指定np.random.randint(1, 10, size=(2, 2)) → 生成 2×2 数组,元素在 1~9 之间

设定随机种子(作用:保证结果固定)

np.random.seed(42)  # 固定种子,后续随机数相同
rand_arr = np.random.rand(3)  # 每次运行结果一致
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值