当前位置: 首页 > news >正文

Python 商务数据分析—— NumPy 学习笔记Ⅰ

一、NumPy 简介

1.1 NumPy 特性

  • 高性能科学计算库:专为处理多维数组设计,底层用 C 语言实现,运算速度远超 Python 原生列表。
  • 矢量运算:支持批量数据操作,避免显式循环,代码更简洁高效。
  • 广播机制:自动处理不同形状数组间的运算。
  • 丰富函数库:包含线性代数、傅里叶变换、随机数等功能。

1.2 应用场景

  • 数据分析:处理大规模结构化数据。
  • 机器学习:作为 TensorFlow/PyTorch 等框架的底层支持。
  • 科学计算:物理模拟、统计学分析。
  • 图像处理:多维数组表示像素数据。

1.3 安装与导入

pip install numpyimport numpy as np

二、NumPy 基础 —— 数组对象

2.1 数组与列表对比

特性

NumPy 数组 (ndarray)

Python 列表 (list)

数据类型

元素类型必须一致

可包含任意类型元素

内存存储

连续内存空间,访问速度快

非连续存储,访问较慢

运算效率

支持向量化运算,速度快

需显式循环,速度慢

维度支持

支持 n 维数组

仅支持一维结构

2.2 创建数组的四种方式

方法

语法

示例

np.array()

从列表 / 元组创建

arr1 = np.array([10, 20, 30, 40])

np.arange()

生成等差数列

arr2 = np.arange(0, 10, 2)

np.random

生成随机数组

arr3 = np.random.random((2, 3))

特殊函数

zeros/ones/full/eye

arr_zeros = np.zeros((3, 3))

代码示例
通过np.array创建数组
import numpy as np
a = np.array([1, 2, 3, 4])
print(a)  # 输出结果: [1 2 3 4]
通过np.arange创建数组
import numpy as np
a = np.arange(0, 10, 2)  # 创建0-10,步数为2的数组
print(a)  # 输出结果: [0 2 4 6 8]
通过np.random.random创建数组
import numpy as np
a = np.random.random((2, 3))
print(a)  # 输出类似于: [[0.04631855 0.21257259 0.73199394]#          [0.59865848 0.15601864 0.15599452]]
通过特殊函数创建数组
import numpy as np
array_zeros = np.zeros((3, 3))  # 3行3列全零数组
array_ones = np.ones((4, 4))   # 4行4列全一数组
array_full = np.full((2, 3), 9)  # 值为9的2行3列数组
array_eye = np.eye(4)  # 生成一个在斜方形上元素为1,其他元素都为0的4行4列矩阵
print(array_zeros)  # 输出: [[0. 0. 0.]#               [0. 0. 0.]#               [0. 0. 0.]]
print(array_ones)  # 输出: [[1. 1. 1. 1.]#               [1. 1. 1. 1.]#               [1. 1. 1. 1.]#               [1. 1. 1. 1.]]
print(array_full)  # 输出: [[9 9 9]#                [9 9 9]]
print(array_eye)  # 输出: [[1. 0. 0. 0.]#               [0. 1. 0. 0.]#               [0. 0. 1. 0.]#               [0. 0. 0. 1.]]

三、数组数据类型

3.1 核心数据类型

类型

描述

标识符

示例

bool

布尔值

b

True/False

int8

1 字节整数

i1

-128~127

int32

4 字节整数

i4

-2147483648~2147483647

float16

半精度浮点数

f2

16 位,精度约 3 位小数

float64

双精度浮点数

f8

标准浮点数

object

Python 对象

O

存储类实例等

3.2 类型操作

查询数据类型

import numpy as npclass Person:  # 定义Person类def __init__(self, name, age):self.name = nameself.age = agezs = Person('张三', 18)  # 产生对象
ls = Person('李四', 20)
d = np.array([zs, ls])
print(d)  # 输出: [__main__.Person object at 0x00000176CB4F2208 __main__.Person object at 0x00000176CB4F2288]
print(d.dtype)  # 输出: dtype('O')

创建数组指定数据类型

import numpy as np
a = np.array([1, 2, 3, 4, 5], dtype='int32')  # 使用dtype指定创建数组的数据类型
print(a)  # 输出结果: [1 2 3 4 5]
print(a.dtype)  # 输出: int32

修改数据类型

import numpy as np
a = np.array([1, 2, 3, 4, 5])
f = a.astype('float16')  # 使用astype改变数组的数据类型
print(f.dtype)  # 输出结果: float16

四、多维数组操作

4.1 维度与形状

数组

维度 (ndim)

形状 (shape)

含义

[1,2,3]

1

(3,)

一维数组,3 个元素

[[1,2],[3,4]]

2

(2,2)

2 行 2 列二维数组

[[[1,2],[3,4]],[[5,6],[7,8]]]

3

(2,2,2)

3 维数组,2 个 2x2 矩阵

4.2 基本操作

数组维度查询

import numpy as np
a1 = np.array([1, 2, 3])
a2 = np.array([[1, 2, 3], [4, 5, 6]])
a3 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(a1.ndim)  # 输出: 1
print(a2.ndim)  # 输出: 2
print(a3.ndim)  # 输出: 3

数组形状查询

import numpy as np
a1 = np.array([1, 2, 3])
a2 = np.array([[1, 2, 3], [4, 5, 6]])
a3 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(a1.shape)  # 输出: (3,)
print(a2.shape)  # 输出: (2, 3)
print(a3.shape)  # 输出: (2, 2, 3)

修改数组形状

import numpy as np
a1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
a2 = a1.reshape((2, 6))  # reshape是将数组转换成指定的形状,然后返回转换后的结果,原数组的形状不会发生改变
print(a2)  # 输出: [[ 1  2  3  4  5  6]#          [ 7  8  9 10 11 12]]
print(a1.shape)  # 输出: (4, 3)
a1.resize((4, 3))  # resize是将数组转换成指定的形状,会直接修改数组本身,并且不会返回任何值
print(a1)  # 输出: [[1 2 3]#          [4 5 6]#          [7 8 9]#          [10 11 12]]

通过特殊函数创建数组

import numpy as np
array_zeros = np.zeros((3, 3))  # 3行3列全零数组
array_ones = np.ones((4, 4))   # 4行4列全一数组
array_full = np.full((2, 3), 9)  # 值为9的2行3列数组
array_eye = np.eye(4)  # 生成一个在斜方形上元素为1,其他元素都为0的4行4列矩阵
print(array_zeros)  # 输出: [[0. 0. 0.]#               [0. 0. 0.]#               [0. 0. 0.]]
print(array_ones)  # 输出: [[1. 1. 1. 1.]#               [1. 1. 1. 1.]#               [1. 1. 1. 1.]#               [1. 1. 1. 1.]]
print(array_full)  # 输出: [[9 9 9]#                [9 9 9]]
print(array_eye)  # 输出: [[1. 0. 0. 0.]#               [0. 1. 0. 0.]#               [0. 0. 1. 0.]#               [0. 0. 0. 1.]]

4.3 素组索引

下标索引

import numpy as np
a = np.arange(6)  # 一维数组
print(a)  # 输出: [0 1 2 3 4 5]
print(a[2])  # 输出: 2
print(a[-2])  # 输出: 4(从后往前数第2个)a = np.arange(9).reshape(3, 3)  # 二维数组
print(a)  # 输出: [[0 1 2]#          [3 4 5]#          [6 7 8]]
print(a[0][1])  # 输出: 1
print(a[0, 1])  # 输出: 1

切片索引

import numpy as np
a = np.arange(6)  # 一维数组
print(a)  # 输出: [0 1 2 3 4 5]
print(a[1:5])  # 输出: [1 2 3 4]
print(a[1:5:2])  # 输出: [1 3]
print(a[::2])  # 输出: [0 2 4]
print(a[::-1])  # 输出: [5 4 3 2 1 0]a = np.arange(9).reshape(3, 3)  # 二维数组
print(a)  # 输出: [[0 1 2]#          [3 4 5]#          [6 7 8]]
print(a[1:3, 1:2])  # 输出: [[4]#               [7]]
print(a[1, :])  # 输出: [3 4 5]
print(a[1, ...])  # 输出: [3 4 5]
print(a[:, 1])  # 输出: [1 4 7]

花式索引

import numpy as np
a = np.arange(6)  # 一维数组
print(a)  # 输出: [0 1 2 3 4 5]
print(a[[1, 2, 5]])  # 输出: [1 2 5]
print(a[np.array([(0, 1, 3), (1, 4, 5)])])  # 输出: [[0 1 3]#                [1 4 5]]a = np.arange(9).reshape(3, 3)  # 二维数组
print(a)  # 输出: [[0 1 2]#          [3 4 5]#          [6 7 8]]
print(a[[1, 0]])  # 输出: [[3 4 5]#                [0 1 2]]
print(a[[0, 2], 1])  # 输出: [1 7]
print(a[np.ix_([0, 1], [0, 1])])  # 输出: [[0 1]#                [3 4]]

布尔索引

import numpy as np
a = np.arange(6)  # 一维数组
print(a)  # 输出: [0 1 2 3 4 5]
print(a > 3)  # 输出: [False False False False  True  True]
print(a[a > 3])  # 输出: [4 5]a = np.arange(9).reshape(3, 3)  # 二维数组
print(a)  # 输出: [[0 1 2]#          [3 4 5]#          [6 7 8]]
print(a > 3)  # 输出: [[False False False]#               [False  True  True]#               [ True  True  True]]
print(a[a > 3])  # 输出: [4 5 6 7 8]

相关文章:

  • Docker Desktop 4.42集成的MCP工具包
  • (C++)素数的判断(C++教学)(C语言)
  • SQL Server 基础语句3: 数据操作(插入、删除、更新表)与数据类型
  • 931、下降路径最小和
  • 大模型LoRA微调实践
  • 2025-06-22 思考-人的意识与不断走向死亡的过程
  • frp v0.62.1内网穿透搭建和使用
  • Kafka 源码剖析:消息存储与协议实现(二)
  • 【redis使用场景——缓存——双写一致性】
  • ICML 2025 | 时空数据(Spatial-Temporal)论文总结
  • React中的useEffect详解
  • Ollama按照与使用
  • Cursor快速上手+科学使用指南
  • 【webSocket】WebSocket全双工通信实战指南
  • 跨域视角下强化学习重塑大模型推理:GURU框架与多领域推理新突破
  • 《福格行为模型》
  • JMeter API 并发性能测试计划JMX文件解析
  • wx小程序登录设置角色
  • AI产品经理的定义边界与价值重构
  • 《单光子成像》第八章 预习2025.6.22
  • 怎么申请网站空间域名/湖南网站优化
  • 电脑可以做服务器部署网站吗/先做后付费的代运营
  • 网站怎么做留言板/外链是什么意思
  • 在搜狐快站上做网站怎么跳转/亚马逊关键词搜索器
  • 网页设计的目的/网站seo方案撰写
  • 汽车网站代码/app有哪些推广方式