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

Python数据分析篇:(二)数组索引、切片和运算

一、索引和切片

(1)一维

可以理解成列表的索引,规则相同。

对每个元素事先进行0 1 2 3……的编号(另有负编号对应……-3 -2 -1 )

输入单个数字编号,则索引对应编号的元素。

加入引号,则索引从a元素到b元素,但不包括b编号的元素

详细规则讲解,可以观看如下文章:

Python知识点精汇!字符串:定义、截取(索引)和其内置函数_python 字符串截取-CSDN博客https://blog.csdn.net/2301_81711570/article/details/143814571示例:

我们可能会发现,2 5都是孤零零一个数字,而下面的2却有[ ]  为什么呢?

这是因为a1[2]是索引为2的单个元素。它直接返回该元素的值

而a1[2:3]这是一个切片操作,返回的是一个子数组,即返回从索引2到3(但不包含3)的部分

(2)多维

单维:

[0 1 2]

多维:

 [0 1 2]
 [3 4 5]

关于多维的索引,规则也和单维大同小异。

其大体格式如下:

a[ m : n , p : q ]

我们只需要记住:

逗号左边是索引行,逗号右边是索引列

引号就是从谁到谁

举个例子:

print(a1[0,0:2]):先索引第0行,再索引第0行的第0到1列,所以是[0 1]
print(a1[:,1]):先索引最开始行到最后行(即所有行),再索引所有行的第1列,所以是[1 4]
print(a1[:1,:2]):先索引最开始行到编号1行(不包括1行),即索引的第0行,然后再索引第0行的最开始列到编号为2的列(不包括编号2列),即第0行的0和1列,所以是[[0 1]]

在这里,我们同样可以看到[0 1]和[1 4]只有1个括号,但是为什么[[0 1]]有两个?

这是因为前两者返回的是一维数组,所以只有一个方括号。

而后者返回的是二维数组(即使只有一行),所以有两个方括号,表示它是一个包含一行的二维数组。


如果我们嫌麻烦或者不理解,也有记住的诀窍:

我们只需要记住,有几个引号,就有几个方括号。

不信你看看一维和多维的列子,是不是都是这样

(3)扩展

扩展一个知识,直接看例子:

这个括号是什么意思呢??

意思就是索引,这不过此处逗号的意思变成了“

所以a1[(0,1),(1,2)]的意思就是:

索引0行1列的元素和1行2列的元素,即1和5

Tips:

此时,我们若再想知道有几个方括号,就不可以那么数引号了,中规中矩的算吧。

二、运算

(1)四则运算

四则运算还是:

+、-、*、/、**(幂)

具体可自学离散数学中关于矩阵数组一类的运算知识了

如:

(2)广播机制

先摆一下标准解释

NumPy 的 ufunc(通用函数)广播机制使得不同形状的数组在进行元素级操作时能够兼容计算。通过广播,NumPy 能够自动调整数组的形状,使得不同维度的数组能够进行高效的数学运算,而不需要显式地复制数据。

广播机制的工作基于以下几个规则:

  1. 如果两个数组的维度不同,NumPy 会尝试通过在较小维度的前面添加 "1" 来扩展它们的形状,使得它们在形状上兼容。这个过程称为 "扩展"(broadcasting)。

  2. 广播的条件:两个数组在做元素级操作时,必须满足以下条件之一:

    • 维度相同:两个数组的维度数相同。
    • 某些维度的大小为1:如果某个维度的大小为 1,则该维度的大小可以扩展,以匹配另一个数组在该维度的大小。

我们跳过繁琐的解释,通俗的解释一下:

如果数组a和数组b的形状不一样,那就让小的那个数组变成跟大的那个数组形状一样了,再去计算。

至于怎么变,那就是复制粘贴。

我们结合一个例子来理解:

比如矩阵a1是[0 1 2]
                      [3 4 5]
矩阵a2是:[0 1 2]

我们让两个矩阵相加,即a1+a2

a2会先变成[0 1 2]

                   [0 1 2]        

然后再去和a1相加

如图:

即,小的数组,会复制粘贴已有的行或列,自动补齐成和大数组形状一样的,再去运算

如果有的少行,有的少列,那就补齐成二者所能共同形成的最小形状 ,如下例子

:::

如果情况复杂一些,诸如:

a 的形状从1 2 3 变成了 1 2 3

                                      1 2 3

b 的形状从10 

                  20

变成了10 10 10

           20 20 20

最终,两个数组的形状变成了 (2, 3)在去计算即可。


http://www.kler.cn/a/564206.html

相关文章:

  • 【12】智能合约开发入门
  • 基于STM32的智能家居能源管理系统
  • AI大模型-提示工程学习笔记19-自我反思
  • RISCV指令集解析
  • 大模型应用:多轮对话(prompt工程)
  • 高防IP能够给网站带来哪些好处?
  • 软件工程复试专业课-UML
  • DeepSeek 发布 FlashMLA:突破H800性能极限,重塑边缘计算格局
  • 过滤器 二、过滤器详解
  • CogFindCircleTool工具
  • Python 的历史进程
  • 自动化设备对接MES系统找DeepSeek问方案
  • 【git】【reset全解】Git 回到上次提交并处理提交内容的不同方式
  • PageHelper新发现
  • React低代码项目:问卷编辑器
  • 不能初始化photoshop,因为暂存盘已满
  • 轻松搭建:使用Anaconda创建虚拟环境并在PyCharm中配置
  • 【Bug】natten:安装报错(临近注意力机制的高效cuda内核实现)
  • 深入了解 Python 中的 MRO(方法解析顺序)
  • 网络安全学习中,web渗透的测试流程是怎样的?