python高级语法-你了解numpy吗(numpy进阶)
创建数组等基础操作见:https://blog.csdn.net/zhouchen1998/article/details/82145688
1.索引和切片
基本切片:可以使用slice对象切片,也可以像python内置类型一样。
import numpy as np
a = np.arange(10)
print(a)
s = slice(2, 7, 2)
print(a[s])
print(a[2:7:2])
基本索引:类似list,注意可以使用...表示维度数
a[1,...]
如上,表示第二行元素。
高级索引:用数组或者布尔值来访问数组的方式。
a = np.array([[1, 2, 3], [4, 5, 6]])
b = a[[0, 1, 2], [0, 1, 0]]
# 获得上面组合的下标:(0,0),(1,1),(2,0)
a[a>10]
2. 广播
指的是NumPy 在算术运算期间处理不同形状的数组的能力。(也就是做出数学上本不能有结果的数值,例如不匹配的行和列)
这里比较复杂,不多赘述,如果是数据分析或者机器学习方面的可以继续深入研究。
3.迭代
利用numpy.nditer()
import numpy as np
a = np.arange(0, 60, 5)
a = a.reshape(3, 4)
print('原始数组是:')
print(a)
print('\n')
print('修改后的数组是:')
for x in np.nditer(a):
print(x, end=" ")
4.数组操作
数组操作
-形状修改
reshape 不改变数据的条件下修改形状
flat 数组上的一维迭代器
flatten 返回折叠为一维的数组副本
ravel 返回连续的展开数组
-翻转操作
transpose 翻转数组的维度
ndarray.T 和self.transpose()相同
rollaxis 向后滚动指定的轴
swapaxes 互换数组的两个轴
-维度修改
broadcast 产生模仿广播的对象
broadcast_to 将数组广播到新形状
expand_dims 扩展数组的形状
squeeze 从数组的形状中删除单维条目
-数组连接
concatenate 沿着现存的轴连接数据序列
stack 沿着新轴连接数组序列
hstack 水平堆叠序列中的数组(列方向)
vstack 竖直堆叠序列中的数组(行方向)
-数组分割
split 将一个数组分割为多个子数组
hsplit 将一个数组水平分割为多个子数组(按列)
vsplit 将一个数组竖直分割为多个子数组(按行)
-元素增删
resize 返回指定形状的新数组
append 将值添加到数组末尾
insert 沿指定轴将值插入到指定下标之前
delete 返回删掉某个轴的子数组的新数组
unique 寻找数组内的唯一元素
5.矩阵库
numpy.matlib
对于矩阵提供了很多方便操作
6.matplotlib
著名的绘图库。配合numpy有很强大的数学分析能力。
import numpy as np
from matplotlib import pyplot as plt
x = np.arange(1,11)
y = 2 ** x - 10
plt.title("demo")
plt.xlabel("x ")
plt.ylabel("y ")
plt.plot(x, y)
plt.show()
7.ndarray的IO能力
可以磁盘存储为npy文件。