NumPy核心概念与实战:从ndarray到广播机制指南
很多朋友学 Python 科学计算第一个绕不开的库就是 NumPy。就算你还没决定走数据分析还是人工智能方向随便打开一本教程目录里大概率都会出现“11.1 NumPy 简介与核心概念”这样的小节。这个标题听起来平平无奇但真上手之后你会慢慢意识到NumPy 绝不是一个“改进版的数组”那么简单它其实是整个 Python 数据生态的地基pandas 的 DataFrame 底层是 ndarrayscipy 的各种算法离不开它scikit-learn 的数据接口默认就是 NumPy 数组甚至很多深度学习框架的预处理阶段也满眼都是 NumPy 操作。所以这篇文章不打算只给概念下定义我会从安装环境开始把 ndarray、dtype、索引切片、广播、向量化计算、线性代数这些核心概念串起来讲最后单独整理几个我自己踩过的高频坑。内容同时照顾两类读者刚接触 NumPy、连安装都可能卡住的新手以及学了一部分、想系统把概念串联起来的老同学。看完之后可以照着代码敲一遍剩下的就是练习和经验的积累了。1. 为什么 Python 列表做不了科学计算1.1 Python 列表慢在哪里很多人学 NumPy 之前都会有个疑问Python 不是自带列表list吗直接用列表做计算不行吗答案是不行因为它在内存里的组织方式决定了它不适合做大规模数值计算。这里有个细节值得展开。Python 列表里存的实际是对象的引用而每个整数或浮点数又是独立的对象带有类型信息、引用计数等额外开销。CPU 在一个个元素之间跳转时引用指向的内存地址是分散的无法像连续内存块那样批量预读缓存命中率自然很低。打个比方一个库房里的货物没有按固定位置摆放每次你要按清单取货都得在库房里来回跑越跑越慢。用纯 Python 写一个三重循环的矩阵乘法在数据量稍微大一点的时候慢到你觉得电脑卡死了其实它只是在认真计算。网上偶尔能看到“python 行列式计算不使用 numpy”这类搜索我能理解这种需求教学作业、面试题经常要求不调库实现行列式或矩阵乘法。但这类手写练习恰恰暴露了 Python 列表的性能痛点你每访问一个元素都要走一遍对象解析循环层数一多性能就崩了。1.2 NumPy 选择了一条更工程化的路NumPy 的核心数据结构叫 ndarray全称是 n-dimensional array翻译过来就是 n 维数组。它的设计和 Python 列表有本质区别所有元素保存在一块连续的内存区域里并且要求数组中所有元素的类型一致也就是拥有统一的 dtype。这个限制看起来有点死板但实际上换来了巨大的性能优势。连续内存意味着 CPU 可以高效预取系统底层用 C 语言实现的大循环也能直接编译优化。更关键的是在代码书写层面你不需要写循环直接写arr2 arr1 * 2NumPy 会对整个数组做一个广播式的批量操作这种“一次性描述批量操作”的思维被称为向量化。所以你看NumPy 解决的问题不只是运行速度还有表达效率。整个 Python 数据科学生态也都建立在它之上学好 ndarray 的这些概念后面学 pandas、scipy、scikit-learn 会顺很多。2. 5 分钟把环境安排明白安装与版本自检2.1 安装 NumPy 的常见方式不管你是从“numpy 安装”这个搜索词进来的还是已经在环境里折腾过一轮安装这一步建议用虚拟环境别一股脑往系统 Python 里装。最直接的方式是用 pippython -m venv numpy_env source numpy_env/bin/activate # Windows 下是 numpy_env\Scripts\activate pip install numpy如果你平时已经用 Anaconda那更简单conda create -n np_test python3.11 conda activate np_test conda install numpy这里要解释一下为什么我反复强调虚拟环境。NumPy 的版本升级非常频繁你的项目 A 可能需要 1.26项目 B 可能依赖 2.x如果都在同一个环境里互相覆盖等到某个包开始报“版本不匹配”的时候你会花大量时间去排查到底是谁把谁破坏了。用一个项目一个虚拟环境的方式从源头就规避了这类问题。2.2 验证安装是否正确安装完成之后先不要急着写业务代码花十秒钟验证一下环境。在终端输入python -c import numpy as np; print(np.__version__)如果能看到类似2.1.0这样的版本号说明已经装好。如果你同时装了多个 Python比如系统自带的 Python、Anaconda、还有某个 IDE 捆绑的解释器很可能出现“明明 pip list 里有 numpy但 import 就是报错”的情况。这时候查一下当前解释器路径python -c import sys; print(sys.executable)确认这个路径是不是你安装 numpy 时用的解释器。很多新人踩的“ModuleNotFoundError”坑八成就是解释器选错了。另一个很容易遇到的消息是module compiled against a different version of numpy。这通常说明某个第三方库在编译时依赖了旧版 NumPy 的 API而你当前环境里的 NumPy 太新了。常见处理办法是固定 NumPy 大版本比如pip install numpy1.26.4或者升级那个第三方库到支持新版 NumPy 的版本。一般来说把整条环境的包统一管理好这个告警就不会出现。3. 认识主角 ndarray从创建到内存布局3.1 创建 ndarray 的常用姿势真正开始用 NumPy第一件事就是创建数组。我建议把这几个函数背下来因为它们能覆盖 90% 的日常需求import numpy as np # 从现有列表创建 a np.array([1, 2, 3]) # 全 0、全 1、全指定值 b np.zeros((3, 4), dtypenp.float32) c np.ones((2, 2)) d np.full((3,), 7) # 等差和等间隔序列 e np.arange(0, 10, 2) # [0, 2, 4, 6, 8] f np.linspace(0, 1, 5) # [0, 0.25, 0.5, 0.75, 1] # 随机数推荐用 default_rng rng np.random.default_rng(42) g rng.normal(0, 1, (2, 3))这里有个容易犯的小错误np.zeros((3, 4))的第一个参数是一个元组表示数组的形状不是两个独立参数。写np.zeros(3, 4)会直接报错。背后的逻辑是 NumPy 希望用一个统一的“形状描述符”来创建数组无论一维还是高维都通过元组来表达。创建完数组之后先养成一个习惯看一眼.shape和.dtype。.shape告诉你数组每个维度的大小.dtype告诉你每个元素是什么类型。这两个属性基本决定了后面所有操作的合法范围。3.2 dtype 才是 ndarray 的精髓很多初学者不太关心 dtype但我可以负责任地说dtype 是 ndarray 性能优势的重要来源。它规定了每个元素占用多少字节比如np.int81 字节np.int648 字节np.float324 字节np.float648 字节np.bool_1 字节类型越宽能表示的数值范围越大精度越高但内存也越高。举个例子一个(10000, 10000)的float64数组要占 800MB 内存如果业务允许换成float32就直接减半。在训练深度学习模型、处理大规模图像特征时这种内存节省非常可观。用astype可以转换类型arr np.array([1.5, 2.5], dtypenp.float64) arr_f32 arr.astype(np.float32)注意astype默认返回一个新数组不会修改原数组。同样地如果你从外部读进来一个整数数组想当浮点数参与计算直接转换一下即可。dtype 带来的另一个好处是因为每个元素大小固定NumPy 可以在幕后直接计算偏移量快速定位任意元素这也支撑了后面要讲的切片和花式索引。3.3 一个容易忽略的场景图像数据里的 NCHW说到 shape我想顺带提一个很多人搜索的高频词numpy nchw。在计算机视觉和深度学习里图像数据经常以 NCHW 格式组织分别代表批量大小 N、通道数 C、图像高度 H、宽度 W。在 NumPy 里创建一个符合 NCHW 布局的数组方式是这样的# 假设一个批次有 2 张图RGB 三通道每张 224x224 img np.zeros((2, 3, 224, 224)) # 取第一张图的第一个通道得到 shape (224, 224) first_channel img[0, 0] # 转成 NHWC 布局即 (2, 224, 224, 3) img_nhwc img.transpose(0, 2, 3, 1)transpose返回的是原数组的一个视图数据不会真移动但内存布局变成了非连续。如果你之后要把数组喂给某些需要连续内存的底层库可以再补一个np.ascontiguousarray(img_nhwc)。这个细节可以放入你的知识库等真正碰到图像预处理时就明白为什么要这么做了。4. 索引、切片与广播数据操作的核心4.1 索引和切片的“视图”陷阱ndarray 的索引和 Python 列表很像但有一个关键区别必须记住切片返回的是原始数组的视图不是副本。arr np.arange(24).reshape(4, 6) sub arr[1:3, 2:5] sub[0, 0] 99 # arr 也会被改动因为 sub 和 arr 共享同一块内存这种设计是为了省内存因为切片本质上只是“从原数组的角度描述一个子区域”并没有复制数据。但很多新手在这里栽了跟头想用子数组做计算结果不小心把原始数据给改了。如果你需要一个真正独立的副本务必调用.copy()sub arr[1:3, 2:5].copy()另外还有一个不太为人注意的差异布尔索引和花式索引返回的是新数组不再是视图。比如mask arr 10 selected arr[mask] # 这是新数组 rows arr[[0, 2]] # 花式索引也是新数组实际开发中视图和副本的区别直接决定了你会不会出现“明明只改了局部整份数据全变了”的诡异 bug。4.2 广播机制广播broadcasting是 NumPy 新手最容易懵的概念但它其实非常符合直觉。当两个数组形状不同时NumPy 会尝试把较小的数组“扩展”到和较大数组一致再逐元素计算。广播的规则可以简单归纳成一句话从最后一个维度开始往前比对两个维度只要相等或者其中一个是 1就能兼容。a np.zeros((3, 1)) b np.ones((1, 4)) c a b # 结果 shape 是 (3, 4)这里的逻辑是(3,1)的数组可以看成三行一列(1,4)的数组可以看成一行四列两者相加时第一个数组沿列方向复制四次第二个数组沿行方向复制三次最终拼成一个(3,4)的结果。想象一个纸条纵向贴一行横向贴一列重叠区域就是最终结果。再举一个常见例子data np.random.rand(2, 3) mean data.mean(axis0) # shape (3,) center data - mean # (2,3) 减去 (3,)广播自动扩展如果你对广播规则不熟悉遇到形状对不上的运算会报下面这个错误operands could not be broadcast together with shapes ...。排查方式也很简单先把两侧的 shape 打出来按“从尾部对齐逐维比较”的步骤检查。这个习惯值回票价。5. 用向量化替代循环ufunc 与聚合计算5.1 通用函数与向量化优势在 NumPy 里有一类逐元素运算的函数叫通用函数英文全称 universal function通常简写为 ufunc。比如np.sin、np.exp、np.sqrt、np.add、np.log等它们可以直接作用于整个数组不用再写 for 循环。x np.linspace(0, 2 * np.pi, 1000000) y np.sin(x)这一行代码背后NumPy 直接在 C 层面对一百万个元素做运算而如果你用纯 Python 写[math.sin(v) for v in x]每个元素都要经过 Python 解释器的解析、调用和结果包装。我自己在做实验时测过相同数据量下纯 Python 列表做正弦运算耗时通常在百毫秒级而 NumPy 向量化操作只需要它的零头。差距的核心就在于把循环从 Python 层搬到了 C 层。使用 ufunc 时还需要了解一个细节默认情况下它会返回一个新数组。如果想节省内存可以传入out参数把结果直接写进预分配数组中result np.empty_like(x) np.sin(x, outresult)这种写法在内存敏感的大数据场景里很实用虽然日常用不到但遇到性能调优时能派上用场。5.2 聚合操作与 axis 参数聚合函数用于从数据中提取统计量比如sum、mean、max、min、argmax、cumsum等。它们最核心的参数是axis也是不少初学者的拦路虎。先看一个例子data np.array([[1, 2, 3], [4, 5, 6]])data.mean()返回 3.5这是全体元素的平均值。data.mean(axis0)返回[2.5, 3.5, 4.5]这是沿着行的方向跨列聚合也就是求每一列的平均值。data.mean(axis1)返回[2., 5.]这是沿着列的方向跨行聚合求每一行的平均值。直观理解axis0表示把这个轴“压扁”让剩下的维度保留下来。shape(2,3)按axis0聚合后变成(3,)按axis1聚合后变成(2,)。在实际的数据标准化代码里这段非常常见mean data.mean(axis0) std data.std(axis0) data_norm (data - mean) / std这里data是 (样本数, 特征数) 的矩阵mean和std都是 (特征数,) 的向量广播机制自动把均值和标准差扩展到每一行。6. 从矩阵乘法到线性代数实用操作6.1 矩阵运算dot、matmul 和 矩阵乘法在机器学习里几乎无处不在NumPy 提供了几种等价写法A np.array([[1, 2], [3, 4]]) B np.array([[5, 6], [7, 8]]) result np.dot(A, B) result2 np.matmul(A, B) result3 A B日常写代码我建议优先用语义清晰可读性最高。要注意的是一维数组之间用计算的是点积返回一个标量二维数组之间是标准矩阵乘法二维乘一维会把一维当列向量处理。这些规则看似琐碎但如果你的是维度不匹配会直接报错。写代码之前先看一眼两个矩阵的 shape能省去大量排查时间。举个线性回归的例子X np.random.rand(100, 3) # 100 个样本3 个特征 theta np.array([1.0, -2.0, 0.5]) y_pred X theta # shape (100,)这行代码等价于对每个样本做一次特征和权重的线性组合但不需要你显式写循环。6.2 解线性方程组、行列式与特征值NumPy 的linalg模块封装了不少线性代数功能。比如解方程组Ax bA np.array([[2, 1], [1, 3]]) b np.array([5, 6]) x np.linalg.solve(A, b) print(x) # [1.8, 1.4]可以回代验证这里我要专门说一句能用solve就别先求逆矩阵再用inv(A) b。原因在于求逆的计算量更大而且数值稳定性更差。np.linalg.solve内部用了矩阵分解等更稳定的算法结果也更可靠。至于行列式直接调M np.array([[2, 0, 0], [0, 3, 0], [0, 0, 4]]) np.linalg.det(M) # 24.0回到之前提到的“行列式计算不使用 numpy”的场景如果是面试题要求手写递归展开那是为了让你理解代数余子式如果是实际项目放心用np.linalg.det。手写递归实现的复杂度通常是阶乘级别矩阵稍大一点就跑不动了而库函数能处理的规模要大一两个数量级。7. 常见问题与排查技巧实录7.1 环境与版本类问题我把平时被问得最多、自己也踩过的坑整理成了一张速查表现象常见原因解决方案ModuleNotFoundError: No module named numpy装到了另一个 Python 环境用python -m pip install numpy装到当前解释器先确认sys.executablemodule compiled against a different version of numpy某个第三方包按旧版 NumPy 编译升级第三方包或固定 NumPy 到匹配版本比如pip install numpy1.26.4pip 装完 numpy 后 conda 环境乱了conda 和 pip 混合安装导致覆盖尽量用conda install必须用 pip 时确认当前环境是哪一个在某个 IDE 里 import 失败终端却成功IDE 用了另一个解释器在 IDE 中把解释器路径改为刚才验证过的那一个版本不匹配的问题在 NumPy 2.0 发布后被放大了一波因为 2.0 对许多旧 API 做了调整部分第三方库来不及适配。如果你的项目暂时没有强依赖新特性的需求卡在一个稳定版本上完全合理。7.2 数组使用和计算类问题除了环境数组本身的坑也很多。最常见的是广播失败a np.ones((3, 2)) b np.ones((2, 3)) # a b 会报错这是因为从尾部维度比对时2 和 3 既不相等也没有一个是 1不符合广播规则。还有一类隐蔽问题来自视图与副本。切片返回视图容易误改原数组解决思路是一旦发现数组之间“互相影响”立刻检查是否有某个子数组来自切片而没有.copy()。更基础但也很重要的是拿到任何数组先打印.shape尤其在reshape的时候很多报错都源于对维度数量理解不一致。比如arr.reshape(-1, 1)和arr.reshape(-1)形状看起来差不多实际一个是列向量、一个是扁平向量参与广播时的行为完全不同。内存溢出也值得注意。创建一个巨大的数组之前先用dtype和 shape 估算一下内存占用。比如np.zeros((10000, 10000), dtypenp.float64)是 800MB如果换成float32就是 400MB分块处理还能更低。7.3 一个关于“预分配”的经验最后分享一个让我印象深刻的性能教训。以前我写数据处理脚本经常把结果塞进列表最后统一np.array(results)。数据量小时没问题量一大列表的反复扩容和对象开销让整个流程明显变慢。后来改成先确定总行数用np.empty预分配再按行填入速度提升了一个量级。这个经验尤其适合处理日志解析、特征提取这种需要逐条处理但又希望得到 NumPy 数组的场景。8. 从新手到熟练的几条实操习惯如果让我总结一套小而实用的 NumPy 使用习惯大概是这几条第一任何数组到手先看.shape和.dtype。这两个属性是后续所有操作的锚点很多报错都能在这里提前发现。第二能向量化就向量化但不代表彻底不能用循环。如果数据量不大循环写起来更直白那就写循环。只是尽量把内层的数值运算交给 NumPy不要逐元素去取数再算。第三遇到维度要对齐的场合善用reshape和np.newaxis。比如一个 shape 为(3,)的数组想当作列向量和矩阵拼起来先reshape(-1, 1)再操作广播会帮你完成很多事。第四别用np.append在一个大循环里连续追加数组因为它每次都会重新分配内存并复制一次。更好的做法是先np.empty预分配或者收集到 Python 列表里最后一次性转换。这些习惯不会让你的代码一瞬间变成教科书式的完美风格但长期坚持下来排查 bug 的时间会明显减少性能也会稳定得多。NumPy 值得花时间系统过一遍因为它不只是你遇到的第一个科学计算库更是整个 Python 数据世界的地基。等你把 ndarray 的 shape 思维、dtype 意识、向量化习惯建立起来再去看 pandas 或 scikit-learn 的源码会有一种“原来都是这套东西”的通透感。

相关新闻

CoreCoder源码精读系列:逐文件拆解agent.py、llm.py、context.py,看懂生产级Agent的每个设计决策

CoreCoder源码精读系列:逐文件拆解agent.py、llm.py、context.py,看懂生产级Agent的每个设计决策

【免费下载链接】CoreCoder Minimal AI coding agent (~1,000 lines of Python) inspired by Claude Code. Works with any LLM. Think NanoGPT for coding agents. Formerly NanoCoder. 项目地址: https://gitcode.com/gh_mirrors/co/CoreCoder 点击查看 免费下载 …

2026/10/10 19:24:02 阅读更多 →
ProxCenter完全解析:为什么它是VMware vCenter之外最完整的Proxmox管理平台

ProxCenter完全解析:为什么它是VMware vCenter之外最完整的Proxmox管理平台

【免费下载链接】proxcenter-ui ProxCenter is an alternative to VMware vCenter for Proxmox environments. It provides a modern, intuitive web interface to manage multiple Proxmox VE clusters and Proxmox Backup Server instances from a single pane of glass. 项目…

2026/10/10 19:24:02 阅读更多 →
广东板材擦板机厂家有哪些?速博森数控源头工厂实力公司推荐

广东板材擦板机厂家有哪些?速博森数控源头工厂实力公司推荐

广东板材擦板机厂家有哪些?速博森数控源头工厂实力公司推荐近年来,全屋定制家具行业进入精细化竞争阶段,板材开料、封边、打磨后的清洁工序,正成为决定成品品质的关键环节。越来越多家具厂在搜索广东板材擦板机厂家全自动双面擦板机价格肤感…

2026/10/10 19:24:02 阅读更多 →

最新新闻

MSDV方法:如何形式化证明模拟功能模型与晶体管电路的一致性

MSDV方法:如何形式化证明模拟功能模型与晶体管电路的一致性

模拟功能模型和晶体管电路的一致性,是模拟混合信号验证里一块老硬骨头。这篇论文速读想聊的MSDV方法,核心就一句话:怎么用形式化的手段,证明你写在系统级的功能模型,和真正拿去流片的晶体管级网表,在行为上…

2026/10/11 0:03:29 阅读更多 →
用Python自建数据看板:从Excel报表到权限管控的完整实践

用Python自建数据看板:从Excel报表到权限管控的完整实践

1. 为什么我从手工Excel转向自建Python看板1.1 那个每周五下午重复了半年的动作相信不少负责运营报表的人都经历过这个循环:周五下午两三点,各业务线把数据丢过来,我打开一个积累了多年的Excel大表,用透视表拖出本周销量、环比、区…

2026/10/11 0:03:29 阅读更多 →
经济学为什么充满数学公式?从精确表达到决策工具的全面解读

经济学为什么充满数学公式?从精确表达到决策工具的全面解读

为什么经济学里有那么多数学公式?很长一段时间里,“经济学”三个字在我脑海里就是一幅图谱:一边是报纸上经济学家张口就来的政策点评,一边是教材里密密麻麻的方程组和希腊字母。我敢打赌,不少人和我最初的感受一样——…

2026/10/11 0:03:29 阅读更多 →
软件工程毕设提速:8款AI工具助你论文代码双线推进

软件工程毕设提速:8款AI工具助你论文代码双线推进

又是一年毕业季,软件工程专业的学生开始焦虑了。一边是要求越来越严的论文:开题、文献综述、系统设计、测试分析,每一章都要言之有物;另一边是必须跑得起来的代码:前端、后端、数据库、部署,哪一个环节都不…

2026/10/11 0:03:29 阅读更多 →
UE动画修改实战:从资产编辑到重定向与蒙太奇驱动

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动

做UE开发,不管你是做单机玩法、多人在线,还是虚拟制片、数字人,迟早会碰上一个绕不开的需求:动画修改与动画编辑。角色拿来的动作总是“差那么一点意思”——走路颠簸、抬手太高、攻击判定跟动画错位、换个体型骨骼就完全变形………

2026/10/11 0:02:28 阅读更多 →
Tarjan算法详解:用一次DFS找出有向图所有强连通分量

Tarjan算法详解:用一次DFS找出有向图所有强连通分量

有向图里的“互相可达”现象,其实比你想的更常见。模块A调用模块B,模块B又回调模块A;两个微服务互为依赖;社交平台上你关注我、我关注你,这些一旦被画成一张有向图,就会出现一群节点互相之间都能走通的小团…

2026/10/11 0:02:28 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →