人工智能之数据分析 numpy:第三章 Ndarray 对象和数组创建

人工智能之数据分析 numpy

第三章 Ndarray 对象和数组创建


文章目录

  • [人工智能之数据分析 numpy](#人工智能之数据分析 numpy)
  • 前言
  • [一、ndarray 对象的基本特点](#一、ndarray 对象的基本特点)
  • [二、创建 ndarray 的多种方式](#二、创建 ndarray 的多种方式)
    • [1. 从 Python 列表/元组创建](#1. 从 Python 列表/元组创建)
    • [2. 指定数据类型(dtype)](#2. 指定数据类型(dtype))
    • [3. 使用内置函数创建特定数组](#3. 使用内置函数创建特定数组)
      • [(1) `np.zeros(shape)`:全 0 数组](#(1) np.zeros(shape):全 0 数组)
      • [(2) `np.ones(shape)`:全 1 数组](#(2) np.ones(shape):全 1 数组)
      • [(3) `np.empty(shape)`:未初始化的数组(内容随机)](#(3) np.empty(shape):未初始化的数组(内容随机))
      • [(4) `np.full(shape, fill_value)`:填充指定值](#(4) np.full(shape, fill_value):填充指定值)
    • [4. 创建等差或等比序列](#4. 创建等差或等比序列)
      • [(1) `np.arange(start, stop, step)`:类似 Python 的 `range`,但返回 ndarray](#(1) np.arange(start, stop, step):类似 Python 的 range,但返回 ndarray)
      • [(2) `np.linspace(start, stop, num)`:生成等间距的 `num` 个点(包含 stop)](#(2) np.linspace(start, stop, num):生成等间距的 num 个点(包含 stop))
      • [(3) `np.logspace(start, stop, num, base=10)`:对数等间距](#(3) np.logspace(start, stop, num, base=10):对数等间距)
    • [5. 创建单位矩阵和对角矩阵](#5. 创建单位矩阵和对角矩阵)
      • [(1) `np.eye(N, M=None, k=0)`:单位矩阵(对角为 1)](#(1) np.eye(N, M=None, k=0):单位矩阵(对角为 1))
      • [(2) `np.identity(n)`:n×n 单位矩阵(是 `eye(n)` 的简写)](#(2) np.identity(n):n×n 单位矩阵(是 eye(n) 的简写))
      • [(3) `np.diag(v, k=0)`:从向量构造对角矩阵,或提取对角线](#(3) np.diag(v, k=0):从向量构造对角矩阵,或提取对角线)
    • [6. 随机数组生成(使用 `np.random` 模块)](#6. 随机数组生成(使用 np.random 模块))
    • [7. 从已有数组创建新数组(不复制数据或浅拷贝)](#7. 从已有数组创建新数组(不复制数据或浅拷贝))
    • [8. 从文件或字符串读取(略提)](#8. 从文件或字符串读取(略提))
  • 三、常用属性
  • 四、小结:常用创建函数速查表
  • 后续
  • 资料关注

前言

Ndarray 是 NumPy 的核心数据结构,本质是​存储单一数据类型的多维数组​,也是后续所有操作的基础。它具备高效的存储和运算能力,能够支持批量数据处理,区别于 Python 原生列表(可存储多种数据类型、运算效率低)。


一、ndarray 对象的基本特点

  • 同构性:数组中所有元素的数据类型必须相同。
  • 维度(axes):可以是一维、二维、三维甚至更高维。
  • 形状(shape):表示每个维度的大小,是一个元组。
  • 数据类型(dtype) :如 int32float64bool 等。
  • 内存连续:默认情况下,数组在内存中是连续存储的,便于高效访问。

二、创建 ndarray 的多种方式

1. 从 Python 列表/元组创建

python 复制代码
import numpy as np

# 一维数组
a = np.array([1, 2, 3])
print(a)  # [1 2 3]

# 二维数组
b = np.array([[1, 2], [3, 4]])
print(b)
# [[1 2]
#  [3 4]]

注意:np.array() 不会复制数据(除非必要),但会尝试推断 dtype。


2. 指定数据类型(dtype)

python 复制代码
c = np.array([1, 2, 3], dtype=np.float32)
print(c.dtype)  # float32

3. 使用内置函数创建特定数组

(1) np.zeros(shape):全 0 数组

python 复制代码
z = np.zeros((2, 3))
# [[0. 0. 0.]
#  [0. 0. 0.]]

(2) np.ones(shape):全 1 数组

python 复制代码
o = np.ones((2, 2), dtype=int)
# [[1 1]
#  [1 1]]

(3) np.empty(shape):未初始化的数组(内容随机)

python 复制代码
e = np.empty((2, 2))
# 内容不确定,仅分配内存

(4) np.full(shape, fill_value):填充指定值

python 复制代码
f = np.full((2, 3), 7)
# [[7 7 7]
#  [7 7 7]]

4. 创建等差或等比序列

(1) np.arange(start, stop, step):类似 Python 的 range,但返回 ndarray

python 复制代码
r = np.arange(0, 10, 2)  # [0 2 4 6 8]

注意:stop 不包含。

(2) np.linspace(start, stop, num):生成等间距的 num 个点(包含 stop)

python 复制代码
l = np.linspace(0, 1, 5)
# [0.   0.25 0.5  0.75 1.  ]

(3) np.logspace(start, stop, num, base=10):对数等间距

python 复制代码
log_arr = np.logspace(0, 2, 5)  # 10^0 到 10^2,5 个点
# [  1.           3.16227766  10.          31.6227766  100.        ]

5. 创建单位矩阵和对角矩阵

(1) np.eye(N, M=None, k=0):单位矩阵(对角为 1)

python 复制代码
I = np.eye(3)
# [[1. 0. 0.]
#  [0. 1. 0.]
#  [0. 0. 1.]]
  • k 表示对角线偏移(k=1 为上对角,k=-1 为下对角)

(2) np.identity(n):n×n 单位矩阵(是 eye(n) 的简写)

(3) np.diag(v, k=0):从向量构造对角矩阵,或提取对角线

python 复制代码
v = [1, 2, 3]
d = np.diag(v)
# [[1 0 0]
#  [0 2 0]
#  [0 0 3]]

# 反过来:提取对角线
diag_vals = np.diag(d)  # [1 2 3]

6. 随机数组生成(使用 np.random 模块)

推荐使用新的随机数生成器(NumPy 1.17+):

python 复制代码
rng = np.random.default_rng(seed=42)

# 均匀分布 [0, 1)
rand_uniform = rng.random((2, 3))

# 正态分布(均值0,标准差1)
rand_normal = rng.standard_normal((2, 2))

# 整数随机
rand_int = rng.integers(low=0, high=10, size=(3,))

旧方法(仍可用,但不推荐):

python 复制代码
np.random.rand(2, 3)        # 均匀分布
np.random.randn(2, 2)       # 标准正态分布
np.random.randint(0, 10, 5) # 整数

7. 从已有数组创建新数组(不复制数据或浅拷贝)

  • np.copy(a):深拷贝
  • a.view():视图(共享数据)
  • np.asarray(a):如果 a 已是 ndarray,则不复制
python 复制代码
a = np.array([1, 2, 3])
b = a.view()   # 修改 b 会影响 a
c = np.copy(a) # 独立副本

8. 从文件或字符串读取(略提)

  • np.loadtxt(), np.genfromtxt():读文本文件
  • np.fromfile():读二进制文件
  • np.fromstring():从字符串解析(已弃用,建议用 frombuffer

三、常用属性

python 复制代码
arr = np.array([[1, 2, 3], [4, 5, 6]])

print(arr.ndim)   # 维度数:2
print(arr.shape)  # 形状:(2, 3)
print(arr.size)   # 元素总数:6
print(arr.dtype)  # 数据类型:int64(取决于平台)
print(arr.itemsize)  # 每个元素字节数
print(arr.data)   # 内存地址(一般不用)

四、小结:常用创建函数速查表

方法 说明
np.array() 从列表/元组创建
np.zeros() 全 0
np.ones() 全 1
np.empty() 未初始化
np.full() 填充指定值
np.arange() 等差整数序列
np.linspace() 等间距浮点序列
np.eye() / np.identity() 单位矩阵
np.diag() 对角矩阵
rng.random() / rng.integers() 随机数组

后续

部分代码已经上传至gitee,后续会逐步更新,主要受时间原因限制,当然自己也可以克隆到本地学习拓展。

资料关注

公众号:咚咚王

gitee:https://gitee.com/wy18585051844/ai_learning

《Python编程:从入门到实践》

《利用Python进行数据分析》

《算法导论中文第三版》

《概率论与数理统计(第四版) (盛骤) 》

《程序员的数学》

《线性代数应该这样学第3版》

《微积分和数学分析引论》

《(西瓜书)周志华-机器学习》

《TensorFlow机器学习实战指南》

《Sklearn与TensorFlow机器学习实用指南》

《模式识别(第四版)》

《深度学习 deep learning》伊恩·古德费洛著 花书

《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》

《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》

《自然语言处理综论 第2版》

《Natural-Language-Processing-with-PyTorch》

《计算机视觉-算法与应用(中文版)》

《Learning OpenCV 4》

《AIGC:智能创作时代》杜雨+&+张孜铭

《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》

《从零构建大语言模型(中文版)》

《实战AI大模型》

《AI 3.0》

相关推荐
微三云、小叶1 分钟前
酒店 RWA 模式深度拆解:资产轻量化与投资普惠化的双重突破路径
大数据·人工智能·区块链
AI科技星3 分钟前
观察者与宇宙:描述如何创造物理实在
数据结构·人工智能·算法·机器学习·重构
ZKNOW甄知科技3 分钟前
低代码 ITSM 知识管理平台:驱动企业数智化运维的新引擎
运维·服务器·人工智能·低代码·网络安全·自动化
LDG_AGI3 分钟前
【推荐系统】深度学习训练框架(十六):模型并行——推荐系统的TorchRec和大语言模型的FSDP(Fully Sharded Data Parallel)
人工智能·pytorch·分布式·深度学习·语言模型·自然语言处理·推荐算法
wasp5206 分钟前
LightRAG 知识图谱实现关键技术总结(精简版)
人工智能·知识图谱
脑子缺根弦6 分钟前
科技赋能医疗转型,辉视智慧医疗系统,打造高效安全健康的防护网
人工智能·科技·超融合·私人定制·智慧医疗系统
l木本I7 分钟前
OpenArm开源项目总结(移植lerobot框架)
c++·人工智能·python·机器人
Baihai_IDP9 分钟前
压缩而不失智:LLM 量化技术深度解析
人工智能·面试·llm
阿正的梦工坊9 分钟前
R-Zero:从零数据自进化推理大语言模型
人工智能·算法·语言模型·大模型·llm
漫长的~以后10 分钟前
全模态交互革命:阿里Qwen3-Omni-Flash深度解析,拟人化AI的奇点已至
人工智能·交互