
兔兔学习《数据科学技术与应用》笔记持续更新 ing…
第 1 章
字典 “键”的唯一性:如果两个“键”名一样会报错,但是“键”所对应的值可以重复。
第 2 章
多维数组对象
一维数组对象
1 | import numpy as np |
如果说你想访问某个元素,可以直接用方括号索引:
1 | subjects[-3] |
如果你想做切片,要先用多个索引组成“索引列表”。
比如想要把索引位置分别为 2、4、6 的元素切出来,就先组出一个 [2,4,6] 的索引列表,然后再用方括号对这个列表进行索引访问 [[2,4,6]]:
1 | subjects[[2,4,6]] |
❗ 注意:索引访问是直接返回数组中的对象,而切片会生成一个新数组。
Python 中当 |
两端可位运算时,就执行位运算。特别地,两端的变量为布尔型(True、False)的时候,就是逻辑或(也就是 or
)的关系:
1 | names[(names == '王薇') | (names == '钱易铭')] |
二维数组对象
1 | scores = np.array([[70,85,77,90,82,84,89],[60,64,80,75,80,92,90],[90,93,88,87,86,90,91],[80,82,91,88,83,86,80],[88,72,78,90,91,73,80]]) |
这一点很有趣,多维数组的切片要求把行数索引放在一组,列数索引放在一组。
比如 scores[[1,3],[0,1]]
就是 2 行 1 列和 4 行 2 列这两个位置:
1 | scores[(names == '肖良英') | (names == '方绮雯')][:,(subjects = 'Math') | (subjects = 'Python')] |
这一长串代码的逻辑是:先用 (names == '肖良英') | (names == '方绮雯')
这两个条件表达式在 names 数组中判断返回布尔值,然后利用 names 和 scores 的对应关系,在 scores 这个数组中切片出对应的两行数据作为新数组。在新数组的基础上再利用 (subjects = 'Math') | (subjects = 'Python')
进行科目的布尔值返回,把新数组中对应列的数据切片出来。
创建多维数组常用办法
zeros()
函数和 ones()
函数默认生成的数据类型是浮点数,可通过传递形参来改变数据类型:
1 | np.zeros((3,4),dtype=int) |
多维数组运算
广播机制:
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式,当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制。广播的规则:
- 让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加 1 补齐。
- 输出数组的形状是输入数组形状的各个维度上的最大值。
- 如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为 1 时,这个数组能够用来计算,否则出错。
- 当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。
引用自:菜鸟教程
基本算数运算
运算都是会生成新数组的,并非在原数组基础上直接更改,这一点需要注意。