2. NumPy进阶(二)
2.1 Numpy数组操作
2.1.1 添加元素
numpy.append 函数在数组的末尾添加值。 追加操作会分配整个数组,并把原来的数组复制到新数组中
注意:
- 插入的维度要保证所有数组的长度是相同的
- 如果没有指定轴,数组会被扁平处理
- ndarray中 append使用方法
np.append(arr, 8) # 数组app使用方法
""" 结果
array([1, 2, 3, 4, 5, 8])
"""
arr2 = np.random.randint(0, 10, size=(4,3))
arr2
""" 结果
array([[3, 8, 3],
[1, 4, 8],
[6, 9, 9],
[5, 5, 2]])
"""
np.append(arr2, [[1,2,3]], axis=0) # 添加一行
""" 结果
array([[3, 8, 3],
[1, 4, 8],
[6, 9, 9],
[5, 5, 2],
[1, 2, 3]])
"""
data = np.ones(shape=(4,1))
display(data)
""" 结果
array([[1.],
[1.],
[1.],
[1.]])
"""
display(arr2)
"""
array([[3, 8, 3],
[1, 4, 8],
[6, 9, 9],
[5, 5, 2]])
"""
np.append(arr2, data, axis=1) # 添加一列
"""
array([[3., 8., 3., 1.],
[1., 4., 8., 1.],
[6., 9., 9., 1.],
[5., 5., 2., 1.]])
"""
2.1.2 插入元素
numpy.insert 函数在给定索引之前,沿给定轴在输入数组中插入值
如果未提供轴,则输入数组会被展开
2.1.3 删除元素
numpy.delete 函数返回从输入数组中删除指定子数组的新数组。
如果未提供轴参数,则输入数组将展开。
2.1.4 reshape
numpy.reshape 函数可以在不改变数据的条件下修改形状,格式如下: numpy.reshape(arr, newshape, order=‘C’)
- arr:要修改形状的数组
- newshape:整数或者整数数组,新的形状应当兼容原有形状
- order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'k' -- 元素在内存中的出现顺序。
2.1.5. 数组迭代器
numpy.ndarray.flat
for循环与 flat 对比,有下例可见多维数组使用for繁琐,flat更为简洁
2.1.6. 数组扁平处理
numpy.ndarray.flatten() 返回一份展开的数组拷贝,对拷贝所做的修改不会影响原始数组
numpy.ravel() 展平的数组元素,返回一个展开的数组引用,修改会影响原始数组。
2.1.7. 数组翻转
numpy.transpose 对换数组的维度
2.2 数学函数
2.2.1 三角函数
np.sin(), np.cos(), np.tan()
接收的参数是弧度,不是角度
1.2.2. 舍入函数
numpy.around()
a: 数组
decimals: 舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置
2.3. 算数函数
加减乘除: add(),subtract(),multiply() 和 divide()
numpy.power() 幂运算,可以做开方运算
numpy.mode() 求余运算
np.log() 自然底数的对数 np.log2(), np.log10()
2.4. Numpy 查找和排序
2.4.1. 查找索引
numpy.argmax() 和 numpy.argmin() 分别是查找最大值索引位置, 最小值索引位置
1.4.2. 条件查找
numpy.where(condition) 函数返回输入数组中满足给定条件的元素的索引, 返回索引位置
- condition 条件 条件表达式
2.4.3. 快速排序
np.sort()与ndarray.sort()都可以,但有区别:
np.sort()不改变输入
ndarray.sort()本地处理,不占用空间,但改变输入
numpy.sort() 函数返回输入数组的排序副本
1.4.4. 索引排序
numpy.argsort() 函数返回的是数组值从小到大的索引值。
1.4.5. 部分排序
np.partition(a,k)
有的时候我们不是对全部数据感兴趣,我们可能只对最小或最大的一部分感兴趣。
当k为正时,我们想要得到最小的k个数
当k为负时,我们想要得到最大的k个数