官方手册
What is NumPy? — NumPy v2.2 Manual
主要是做==数据处理== 数据分析的基础
核心数据是==数组==
- 有序
- 数据类型一致
高维数据,简单运算
首先在Jupyter notebook里面对Numpy进行导入 大家装anaconda的时候,这些都自动有的,直接导就行
import numpy as np
numpy太长了,我们导入时将它 重命名 np(牛皮)
查看当前np版本(注意这里是双下划线)
np.__version__
操作
构造数组
目标
快速构造自己想要的数组
- 普通数组
np.array([1,2,3])
传入列表的形式
一个二维的
np.array([[1,2,3],[3,4,5]])
- 更便捷的方式
np.ones(shape=(3,2))
# 以1填充一个3行2列的数组
<NolebasePageProperties />
忘记怎么用了怎么办
Shift Tab可以查看当前方法的说明文档
shape指定形状,比如3行2列
指定数填充
np.full(shape=(4,3),fill_value=6)
随机数填充
np.random.randint(0,10,size=(2,3))
# 2行3列的0到10的随机数数组
size的作用类似于shape
0到1的浮点数数组
np.random.random(size=(3,4))
等差数列 起始,终止,取多少个数
np.linspace(0,10,11)
指定步长(不包含结束值)
np.arange(0,10,1)
访问数组
目标
得多练习,精准定位的能力
array[你想访问到的数字]
Numpy数组的优势(相比python原生的数组来说) 可以用列表当成index访问
array[[0,1,2]]
用列表对数组重新排列和组合,
array[[2,3,1,5]]
用布尔列表的形式访问
arr1=np.array([1,2,3])
arr1[[True,False,True]]
true就拿到,false就忽略
广播运算
快速找到一个数组中大于2的数
arr1 > 2
# 广播运算
arr1[arr1 > 2]
# 此处结合了布尔运算
高维的怎么处理? 对于二维以上的
arr2=np.random.randint(0,10,size=(5,3))
可以通过以下方式
arr2[0][0]
arr2[0,1]
很灵活的访问方式
索引的方式很灵活,可以是整数、列表、条件表达式 array[dim1_index,dim2_index,dim3_index,......dimn_index]
运算
比如广播运算
arr2 + 10
# 对每一个元素进行+10的操作
会自动扩展的相加运算
arr1=np.array([1,2,3])
arr2=np.array([[1],[2],[3]])
# arr2有行和列两个维度,是二维数组
用到了广播机制 arr1会扩展到和arr2行数相同 arr2会扩展到和arr1列数相同 比如对于arr1来说,会变成 1 2 3 1 2 3 1 2 3 对于arr2来说,会变成 1 1 1 2 2 2 3 3 3
arr1+10 10会变成 10 10 10
- 缺失维度自动补充
不能扩展相加的情况
arr1 = np.array([1,2,3])
arr2 = np.array([[1,2],[3,4]])
- 能否相加取决于最后一个轴的长度是否相等或其中一个为 1
运算不止相加,还有关系运算、逻辑运算、赋值运算
排序方法
data.sort()
# 在原数据结构进行的从小到大的排序
np.sort(data)
# 不会破坏原始的结构
建议拷贝后再进行排序等操作
c_data=data.copy()
c_data[0]=9
# 重新写第一个元素,不会影响原结构
级联
形状需要是一样的 3行n列可以和3行k列级联 n行2列可以和k行2列级联 主要用于数据汇总
arr1=np.random.randint(0,10,size=(3,2))
arr2=np.random.randint(10,20,size=(3,3))
np.concatenate((arr1,arr2),axis=1)
# 行数相同,只能横向级联,axis=1