news 2026/7/3 10:21:22

python numpy floor 学Python不疯魔不成活!NumPy的floor函数一出手,数组形状秒变整形,不服来战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python numpy floor 学Python不疯魔不成活!NumPy的floor函数一出手,数组形状秒变整形,不服来战

上节课, 我们学习了NumPy数组的基础创建, 以及其属性, 这节课, 我们要掌握数组的形状变换, 还有多数组堆叠, 以及数组拆分, 这三大核心操作, 而这些都是数据处理里, 最常用的 “整形” 技巧。

一、改变数组的形状

数组, 其形状, 是由每个轴之上的元素数量来决定的, 而这个可以借助 .shape 去查看。NumPy 给出了多种多样的方法, 能够灵活地改变数组的形状, 需要留意的是: 除了以下所提到的方法之外, 其余的方法都会返回新的数组, 并且不会改变原来的数组。

1. ravel():数组扁平化

讲解的内容是, 把那种称为多维数组的东西 “拉直” 转化成一维数组, 并且是按照默认的 “C 风格” 来进行排列的, 这个 “C 风格” 是行优先的排列方式, 也就是位于最右侧的索引变化是最快的, 具体来说就是要先把第一行全部排完, 然后再去排第二行, 依此类推……

案例:

import numpy as np # 模拟3个学生的4门课成绩(3行4列) rg = np.random.default_rng(2) scores = np.floor(10 * rg.random((3, 4))) print("原成绩数组:") print(scores) # 扁平化 flattened = scores.ravel() print("\n扁平化后:") print(flattened)

案例解析: 原本的数组为呈现出三行四列样式的成绩表格存在排列, 通过 ravel() 这个操作按照行优先这种方式展开成为长度是十二的一维数组, 然而原本的数组其自身并没有发生改变。

2. ():调整数组形状

讲解的内容是, 做出这样的操作, 把数组调整成为指定的那种新的形状, 这其中存在一个要求, 要确保总元素的数量是不会发生改变的,并且, 在默认的情况下, 也是按照 “C 风格” 去重新排列元素。

案例:

# 将3行4列的成绩数组调整为6行2列 reshaped = scores.reshape(6, 2) print("reshape为6行2列:") print(reshaped)

针对案例进行剖析: 其中总的元素数量是通过三乘以四得出结果为十二, 在处于特定的(6,2)这种情况之后发生变化成为六行二列 , 元素的排列顺序依据行优先的方式再次进行排列 , 然而原来的数组并没有产生改变。

3. 数组转置(.T)

讲解内容:返回数组的转置(行变列,列变行),不改变原数组。

案例:

print("原数组形状:", scores.shape) # 输出 (3, 4) transposed = scores.T print("转置后形状:", transposed.shape) # 输出 (4, 3) print("\n转置后:") print(transposed)

对于案例进行分析, 原本是有着三行四列的数组, 经过转置之后, 变成了四行三列, 其行与列完全进行了互换, 而且原数组的状态保持不变。

4. ():直接修改原数组形状

要讲解的内容是, 和其他情况不一样, 括号里的操作会直接对原本数组自身的形状进行修改, 并且不会有返回的值。

案例:

print("resize前原数组:") print(scores) scores.resize((2, 6)) # 直接修改原数组为2行6列 print("\nresize后原数组:") print(scores)

以案例进行分析, 在调用了 ((2,6)) 之后, 原本数组的形状, 直接就处于被改变的状态了, 并不需要再次去进行赋值操作。

5. 中使用 -1 自动计算维度

讲解内容: 在特定的时候, 要是把某一个维度设定为 -1, NumPy 会依据总元素的数量自动去计算该维度的大小, 这可被称作是充满便利的懒人神器。

案例:

# 先把数组变回3行4列,再用-1自动计算列数 scores.resize((3, 4)) auto_reshaped = scores.reshape(3, -1) # 3行,列数自动计算 print("自动计算维度后形状:", auto_reshaped.shape) # 输出 (3, 4)

案例方面的分析, 存在这样的情况, 总元素的数量是12 , 当处于(3,-1)这种情形的时候 , 行数被固定设定为3 , 而列数是通过自动计算得出的 , 具体计算是12除以3就等于4。

二、堆叠不同的数组

我们能够把多个数组顺着不一样的轴“拼”凑到一块儿, 进而构成更大的数组。

1. ():垂直堆叠(沿行方向)

需将数组沿着, 那个被称作第一个轴的方向, 进行堆叠操作, 这个方向是行方向, 并且要求用于堆叠的数组, 除了行这个维度之外, 其他的维度形状是一致的。

案例:

# 模拟两个小组的数学成绩(各2行2列) group_a = np.floor(10 * rg.random((2, 2))) group_b = np.floor(10 * rg.random((2, 2))) print("小组A:") print(group_a) print("\n小组B:") print(group_b) # 垂直堆叠 vertical = np.vstack((group_a, group_b)) print("\n垂直堆叠后:") print(vertical)

去分析案例: 存在着两个数组, 这两个数组都是二行二列的, 之后呢, 要变成四行二列, 是按照行的方向进行拼接的, 并且列数维持不变。

2. ():水平堆叠(沿列方向)

需要进行的操作是, 沿着第二个轴, 也就是列的方向, 去堆叠数组, 并且有要求, 那就是等待堆叠的数组, 除了列这个维度之外, 其他的维度形状得是一致的。

案例:

# 水平堆叠 horizontal = np.hstack((group_a, group_b)) print("水平堆叠后:") print(horizontal)

案例剖析: 存在两个数组, 均为两行两列的状况, 之后转变为两行四列, 是在列的方向进行拼接操作, 并且行数维持不变。

3. ():将 1D 数组作为列堆叠成 2D 数组

被讲解的内容是, 专门用来对一维数组以 “列” 的形式进行堆叠从而形成二维数组的;要是面对的是二维数组, 那么所呈现的效果跟 的情况相类似。

案例:

# 模拟两个一维数组:学生的语文和英语成绩 chinese = np.array([82., 91., 76.]) english = np.array([88., 85., 93.]) # 用column_stack堆叠 col_stack = np.column_stack((chinese, english)) print("column_stack堆叠1D数组:") print(col_stack) # 对比hstack(仅拼接成更长的1D数组) h_stack_1d = np.hstack((chinese, english)) print("\nhstack堆叠1D数组:") print(h_stack_1d)

从案例进行分析, 存在这样两种情况, 一种情况是, 将两个单个维度的数组, 转变成为具有三行两列这种形式的二维数组, 其中每一列对应着一门课程;而另一种情况则是, 仅仅是把单个维度的数组, 简易地拼接成为一个长度更长的单个维度的数组。

4. r_ 和 c_:灵活的数组创建与堆叠

以下是改写后的内容: 沿行方向进行堆叠操作的 r_ , 其行为特征类似于已有默认状况展现情形下的那种样式, 沿列方向展开堆叠行为的 c_ , 它也是有着类似于默认呈现状态的表现方式。此外, 这两者还具备借助切片这种操作手段比如说是 1:5 这样的形式来能够迅速地产生数组的能力。

案例:

# 用r_拼接数值和切片 r_array = np.r_[2:5, 0, 6:9] print("r_生成的数组:") print(r_array) # 输出 [2 3 4 0 6 7 8] # 用c_堆叠一维数组 c_array = np.c_[chinese, english] print("\nc_堆叠1D数组:") print(c_array)

案例分析:r_

2:5,0,6:9

利用快速方式生成连续的数组, 将c_进行操作, 即以特定方式把和当作列来堆叠从而形成二维数组, 其呈现出来的效果跟一致。

三、拆分数组

跟堆叠形成相反情形的是, 我们能够将一个规模较大的数组, 按照所指定的轴, “拆解”成为多个规模较小的数组。

1. ():沿水平轴(列方向)拆分

讲解内容:沿列方向拆分数组,有两种用法:

案例:

# 模拟2行12列的月度销售数据 sales = np.floor(10 * rg.random((2, 12))) print("原销售数据:") print(sales) # 拆分成3个等份 split_eq = np.hsplit(sales, 3) print("\n拆分成3等份后的第一个数组:") print(split_eq[0]) # 在第4列和第7列后拆分 split_custom = np.hsplit(sales, (4, 7)) print("\n自定义拆分后的第二个数组(第5-7列):") print(split_custom[1])

对于案例分析而言, (sales,3)这种情况, 是要把12列进行拆分, 拆分成3个4列的数组;而(sales,(4,7))这种情况, 实际是要从中得到三个数组, 分别是0到3列的数组, 4到6列的数组, 以及7到11列的数组。

2. ():沿垂直轴(行方向)拆分

讲解的内容是,要按照行的方向去拆分数组, 其用法跟完全一致的那种情况是一样的, 只不过这里的方向是行。

案例:

# 模拟4行3列的库存数据 inventory = np.floor(10 * rg.random((4, 3))) print("原库存数据:") print(inventory) # 拆分成2个等份 v_split = np.vsplit(inventory, 2) print("\n垂直拆分后的第一个数组:") print(v_split[0])

来进行案例分析, 存在一个四行三列的数组, 要将其拆分成两个等份, 并且每个等份都是两行三列。

3. ():沿指定轴灵活拆分

用更通用的方法来拆分, 借助 axis 参数去指定拆分的轴, 其中 0 是代表行, 1 代表列, 它支持随便什么维度, 并且在元素数量没办法平均分配的时候会自动进行调整, 不会出现报错这种情况。

案例:

# 沿行轴(axis=0)拆分inventory为2份 split_row = np.array_split(inventory, 2, axis=0) print("array_split沿行拆分:") print(split_row[0]) # 沿列轴(axis=1)拆分sales为5份(自动调整宽度) split_col = np.array_split(sales, 5, axis=1) print("\narray_split沿列拆分后的第一个数组:") print(split_col[0])

案例剖析: 借由axis灵活地去指定拆分的方向, 就是即便将12列实施拆分成5份这种情况(没办法做到均匀分配), 它也会自行按照3列、3列、2列、2列、2列这样的方式来进行分配。

小结。这节课我们掌握了:

对数组形状进行变换时, 有ravel()、()、.T、()以及-1自动维度计算;在数组堆叠方面, 涵盖()、()、()以及灵活的r_/c_;而数组拆分则包含()、()还有通用的()。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 10:20:37

Nintendo Switch游戏文件管理终极指南:NSC_BUILDER从入门到精通

Nintendo Switch游戏文件管理终极指南:NSC_BUILDER从入门到精通 【免费下载链接】NSC_BUILDER Nintendo Switch Cleaner and Builder. A batchfile, python and html script based in hacbuild and Nuts python libraries. Designed initially to erase titlerights…

作者头像 李华
网站建设 2026/7/3 10:19:41

快鹭AI领域专家是什么?6大岗位开箱即用,破解“不敢用AI”难题

什么是快鹭AI领域专家?快鹭AI领域专家是快鹭科技推出的企业级岗位AI产品——不是通用聊天AI,而是深度植入企业业务规则、按岗位定制的专属数字专家。覆盖财务、销售、人事、法务、采购、客服6大核心岗位,开箱即用,所有输出结果稳定…

作者头像 李华
网站建设 2026/7/3 10:13:29

PIC18F86J15控制WS2812 LED灯带的嵌入式开发指南

1. 项目概述:WS2812与PIC18F86J15的完美组合WS2812智能LED灯珠与PIC18F86J15微控制器的组合,为嵌入式灯光控制项目提供了强大的硬件基础。WS2812作为目前市场上最流行的可寻址LED解决方案之一,其单线控制协议和丰富的色彩表现能力&#xff0c…

作者头像 李华
网站建设 2026/7/3 10:12:59

Llama-2-7B零配置Colab推理:Hugging Face安全合规部署指南

1. 项目概述:为什么一个“简单指南”值得花20分钟认真读完如果你最近在Colab里点开过Hugging Face的模型卡片,又关掉;试过transformers加载llama-2-7b-chat-hf却卡在OSError: Cant load tokenizer;或者复制粘贴了三段不同版本的推…

作者头像 李华
网站建设 2026/7/3 10:09:37

如何快速提升OneNote效率:NoteWidget Markdown插件的完整指南

如何快速提升OneNote效率:NoteWidget Markdown插件的完整指南 【免费下载链接】NoteWidget Markdown add-in for Microsoft Office OneNote 项目地址: https://gitcode.com/gh_mirrors/no/NoteWidget 你是否经常在OneNote中编写技术文档时,为复杂…

作者头像 李华
网站建设 2026/7/3 10:02:28

生产级机器学习系统:从模型部署到系统韧性的实战指南

1. 项目概述:当模型走出笔记本,真正开始“呼吸”现实世界你有没有经历过这样的时刻:Jupyter Notebook里跑通了所有代码,AUC飙到0.92,老板拍着桌子说“上线!”,团队在庆功宴上碰杯——结果三天后…

作者头像 李华