# NumPy 核心处理方法

NumPy(Numerical Python)是一个用于科学计算的 Python 第三方库,它提供了:

# 核心功能:

  1. 多维数组对象
    • 高效地存储和操作大规模数字数据。
    • 比原生 Python 的列表(list)更快、更节省内存。
  2. 广播功能
    • 允许不同形状的数组进行数学运算,简洁高效。
  3. 数学函数库
    • 包括线性代数、傅里叶变换、随机数生成、统计分析等。
  4. 数组索引与切片
    • 支持布尔索引、花式索引,比 Python 原生更灵活强大。

# 引用

import numpy as np

# 多维性

arr = np.array(5)  # 创建了一个 0 维度的数组
print(arr)
print('arr的维度:', arr.ndim)  # 打印维度 ndim
arr = np.array([1, 2, 3])  # 创建了一个 1 维度的数组
print(arr)
print('arr的维度:', arr.ndim)  # 打印维度 ndim

# 同质性

arr = np.array([1, 'hello', 3])  #测试不同质
print(arr)

结果全部转化为字符串

# ndarray 的属性

arr = np.array(1)
print(arr)
print('arr的维度:', arr.ndim)
print('arr的形状:', arr.shape)
print('arr的元素个数', arr.size)
print('arr的数据类型', arr.dtype)

1
arr 的维度: 0
arr 的形状: ()
arr 的元素个数 1
arr 的数据类型 int64

arr = np.array([1, 2.7, 3])
print(arr)
print('arr的维度:', arr.ndim)
print('arr的形状:', arr.shape)
print('arr的元素个数', arr.size)
print('arr的数据类型', arr.dtype)
print('arr的转置', arr.T)

[1. 2.7 3. ]
arr 的维度: 1
arr 的形状: (3,)
arr 的元素个数 3
arr 的数据类型 float64
arr 的转置 [1. 2.7 3.]

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr)
print('arr的维度:', arr.ndim)
print('arr的形状:', arr.shape)
print('arr的元素个数', arr.size)
print('arr的数据类型', arr.dtype)
print('arr的转置', arr.T)

[[1 2 3]
[4 5 6]]
arr 的维度: 2
arr 的形状: (2, 3)
arr 的元素个数 6
arr 的数据类型 int64
arr 的转置 [[1 4]
[2 5]
[3 6]]

# 指定元素数据类型

list1 = [4, 5, 6]
arr = np.array(list1, dtype=np.float64)

# 预定义数组

# 全零阵

arr = np.zeros((4, 4), dtype=np.int64)
arr = np.zeros((60,), dtype=np.int64)

# 全一阵

arr = np.ones((4, 4), dtype=np.int64)

# 空阵

arr = np.empty((3, 4))

# 满阵

arr = np.full((3, 4), 2)

[[2 2 2 2]
[2 2 2 2]
[2 2 2 2]]

# 形状模仿

arr1 = np.zeros_like(arr)
arr2 = np.ones_like(arr)
arr3 = np.empty_like(arr)

# 定增量(等差数列)

arr = np.arange(1, 106, 1)

# 定间隔(等分数列)

app = np.linspace(1, 100, 10)

# 对角阵

arr = np.diag([1, 2, 3, 4, 5])

# 随机数组

# 默认零到一

arr = np.random.rand(2, 4)# 均匀分布, 0~1

# 指定区间

arr = np.random.uniform(1, 4, (4, 4))

# 随机整数

arr = np.random.randint(1, 10, (4, 4))

# 随机正态分布

arr = np.random.randn(4, 4)

# 随机种子

# 设置随机种子,每次生成的随机数相同
np.random.seed(20)
arr = np.random.randint(1, 4, (4, 4))

# 单位矩阵

arr = np.eye(5, dtype=int)

# 数据类型

# ndarray 的数据类型

  1. 布尔类型
  2. 整形
  3. 浮点型
  4. 复数型

主要通过 dtype 指定

arr = np.array([1, 2, 3, 0, -1], dtype=np.int8)
arr = np.array([1, 2, 3, 0, -1], dtype=np.float32)

# 索引与切片

# 索引

# 一维数组
arr = np.random.randint(10, 100, 30)
# 一维索引
print(arr[3])
print(arr[7])
# 一维布尔索引
print(arr[(arr > 30) & (arr < 50)])
# 二维数组
arr = np.random.randint(10, 100, (5, 8))
# 二维索引
print(arr[2, 3])
print(arr[2][3])

# 切片

# 一维切片
print(arr[3:7])
print(arr[slice(3, 7)])
print(arr[slice(0, 10, 2)])
# 二维切片
print(arr[0, 1:3])
print(arr[arr > 70])
print(arr[0][arr[0] > 90])
print(arr[3])
print(arr[:, 3])

# 运算

# 常规运算

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
print(arr1 + arr2)
print(arr1 * arr2)
print(arr1 - arr2)
print(arr1 / arr2)
print(arr1 ** arr2)
# python 原生
listA = [1, 2, 3]
listB = [4, 5, 6]
for i in range(len(listA)):
    print(listA[i] + listB[i])

python 原生只是纯粹的拼接,ndarray 是在帮你做计算

arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr1 + arr2)
print(arr1 * arr2)
print(arr1 - arr2)
print(arr1 / arr2)
print(arr1 ** arr2)

# 广播机制

# 广播机制,但是需满足维度一致
arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2 = np.array([1, 2, 3])  # [1, 2, 3],[1, 2, 3],[1, 2, 3]
print(arr1 + arr2)
print(arr1 * arr2)
arr1 = np.array([[1, 2, 3]])
arr2 = np.array([[1], [2], [3]])
print(arr1 + arr2)

# 矩阵的运算

# 矩阵运算
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[4, 5], [1, 2], [7, 8]])
print(arr1.dot(arr2))  # 矩阵的乘法,矩阵的行数必须等于矩阵的列数,不是简单的对应相乘
print(arr1 @ arr2)

# 常用函数

# 数学函数

# 平方根

print(np.sqrt(9))
print(np.sqrt([1, 4, 9]))

# 指数

# 计算指数
print(np.exp(1))  #  e^1
print(np.exp([0, 2, 3]))

# 自然对数

# 计算自然对数
print(np.log(np.e))
print(np.log([1, np.e, np.e ** 2]))
print(np.log10(100))

# 三角函数

# 计算三角函数
print(np.sin(np.pi / 2))  # sin(π/2)
print(np.cos(np.pi))  # cos(π)

# 绝对值

# 计算绝对值
print(np.abs(-1))
print(np.abs(np.array([1, -1, 0, -2, 2, -3, 3, -4, 4, -5, 5])))

# a 的 b 次幂

# 计算 a 的 b 次幂
print(np.power(2, 3))

# 四舍五入

# 四舍五入
print(np.round(3.14))
print(np.round([3.14, 2.7, 1.5, 1.2]))

# 上取整与下取整

# 向上取整,向下取整
arr = np.array([1.2, 1.5, 1.6, 1.7, 2.2, 2.5, 2.6, 2.7])
print(np.ceil(arr))
print(np.floor(arr))

# 检测缺失值

arr = np.array([1, 2, np.nan, 4, np.nan])
print(np.isnan(arr))

# 统计函数

求和、计算平均值、计算中位数、标准差、方差、最大值、最小值、计算分位数、累积和、累积差

arr = np.random.randint(1, 10, 10)
print(arr)  # 创建一个 10 个元素的数组
print('排序', np.sort(arr))
print('求和', np.sum(arr))  # 求和
print('计算平均值', np.mean(arr))  # 计算平均值
print('计算中位数', np.median(arr))  # 计算中位数
print('标准差', np.std(arr))  # 标准差 
print('方差', np.var(arr))  # 方差 ((1-2)^2 + (2-2)^2 + ... + (9-2)^2) / 9
print('最大值', np.max(arr))  # 最大值
print('最小值', np.min(arr))  # 最小值
print('计算分位数', np.quantile(arr, 0.5))  # 计算分位数
print('累积和', np.cumsum(arr))  # 累积和
print('累积差', np.cumprod(arr))  # 累积差

# 比较函数

# 是否大于
print(np.greater([1, 3, 5, 1, 8, 0, -23, 3], 2))
# 是否小于
print(np.less([1, 3, 5, 1, 8, 0, -23, 3], 2))
# 是否等于
print(np.equal([1, 3, 5, 1, 8, 0, -23, 3], 3))

# 逻辑运算

# 逻辑运算
print(np.logical_and([1, 3, 5, 1, 8, 0, -23, 3], [1, 3, 5, 1, 8, 0, -23, 3]))
print(np.logical_or([1, 3, 5, 1, 8, 0, -23, 3], [1, 3, 5, 1, 8, 0, -23, 3]))

# 自定义条件

arr = np.array([1, 3, 5, 1, 8, 0, -23, 3])
print(np.where(arr > 3, arr, 0))
print(np.select([arr > 3, arr < 0], [arr, 0], default=arr))

# 排序函数

arr = np.random.randint(1, 10, 20)
print(arr)
print(np.sort(arr))
print(np.argsort(arr))  # 返回排序后的索引

# 去重

arr = np.array([1, 3, 5, 1, 8, 0, -23, 3])
print(np.unique(arr))

# 数组的拼接

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
print(np.concatenate((arr1, arr2)))

# 数组分割

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(np.split(arr, [3, 5]))  # 分成 3 份

# 调整形状

arr = np.random.randint(1, 10, 20)
print(arr)
print(arr.reshape(4, 5))

# 案例练习

# 温度数据分析

某城市一周的最高气温(℃)为 [28, 30, 29, 31, 32, 30, 29]。

  • 计算平均气温、最高气温和最低气温。
  • 找出气温超过 30℃ 的天数。
arr = np.array([28, 30, 29, 31, 32, 30, 29])
print('平均天气:', np.mean(arr))
print('最高气温:', np.max(arr))
print('最低气温:', np.min(arr))
print('气温超过30℃的天数:', np.sum(arr > 30))

# 学生成绩统计

某班级 5 名学生的数学成绩为 [85, 90, 78, 92, 88]。

  • 计算成绩的平均分、中位数和标准差。
  • 将成绩转换为百分制(假设满分为 100)。
arr = np.array([85, 90, 78, 92, 88])
print('平均成绩:', np.mean(arr))
print('中位数:', np.median(arr))
print('标准差:', np.std(arr))
print('成绩转换为百分制:', arr / 100 * 100)

# 数组变形

题目:创建一个 1 到 12 的一维数组,并转换为 (3, 4) 的二维数组。

  • 计算每行的和与每列的平均值。
  • 将数组展平为一维数组。
arr = np.linspace(1, 12, 12, dtype=int)
arr = arr.reshape(3, 4)
print(arr)
print(arr.sum(axis=1))
print(arr.mean(axis=0))
print(arr.flatten())
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

KarryLiu 微信支付

微信支付

KarryLiu 支付宝

支付宝