天天看点

numpy 索引多个_为什么要学Numpy,一文总结知识点

还记得自己刚接触Pandas、Sklearn、Tensorflow这几个技术的时候,经常看到文档和代码中针对多维数组的创建、变形、乘法等操作,因为不了解这些知识导致难以理解进度缓慢,后来才知道它们都是在依赖Numpy这个库。

后来我发现,如果想学好Pandas和Sklearn/Tensorflow这些数据分析、机器学习/深度学习的技术,Numpy是一定要系统性的学习的。

本文总结下Numpy的一些重要的知识内容:

numpy 索引多个_为什么要学Numpy,一文总结知识点

Numpy的介绍

Numpy是什么

Python的一个开源的数值计算扩展库,用来存储和处理多维矩阵

Numpy的用途

高性能的实现二维或多维数组的处理和计算

作为pandas、scikit-learn、tensorflow等基础依赖库

Numpy的基础结构

一维数组、二维数组

Numpy的核心数据结构

数组的属性

数组的维度:shape元组

数组的维度数目:ndim

数组全部元素的个数:size

数组的元素类型:dtype

构造数组

从Python的列表List和嵌套列表创建array:x = np.array([1,2,3,4,5,6,7,8])

便捷函数:arange、ones/ones_like、zeros/zeros_like、empty/empty_like、full/full_like

随机数组

0~1之间均匀分布:rand(d0, d1, …, dn)

均值0方差1的标准分布:randn(d0, d1, …, dn)

随机整数:randint(low[, high, size)

0~1之间随机数:random([size])

从数组a中随机抽取结果:choice(a[, size, replace, p])

对数组x随机打散:shuffle(x)

实现数组全排列:permutation(x)

按均值loc方差scale生成的高斯分布数组:normal([loc, scale, size])

生成low和high之间均匀分布的数字:uniform([low, high, size])

结构化数组

用于表达各列类型不同的异构数据:np.dtype([('name', 'U10'), ('age', 'i4'), ('weight', 'f8')])

可以用列表切片的方式查询行:my_arr[0:2]

用字典的方式查询列:my_arr['age']

按条件做筛选:my_arr[my_arr["age"] >= 29]

对异构数据的操作一般用pandas更容易处理

数组的操作

数据查询

基础索引:X[:2, 2:4]

神奇索引:x[[3,4,7]]

布尔索引:x[x>5]

怎样增加一个维度

arr[np.newaxis, :]

np.expand_dims(arr, axis=0)

np.reshape(arr, (1, 5))

数组的合并

沿着指定axis进行数组的合并:np.concatenate(array_list, axis=0/1)

垂直vertically、按行row wise进行数据合并:np.vstack或者np.row_stack(array_list)

水平horizontally、按列column wise进行数据合并:np.hstack或者np.column_stack(array_list)

数组的乘法

*符号或者np.multiply:逐元素乘法,对应位置的元素相乘,要求shape相同

@符号或者np.matmul:矩阵乘法,形状要求满足(n,k),(k,m)->(n,m)

数组的排序

numpy.sort:返回排序后数组的拷贝

array.sort:原地排序数组而不是返回拷贝

numpy.argsort:间接排序,返回的是排序后的数字索引

数据统计

np.sum:所有元素的和

np.prod:所有元素的乘积

np.cumsum:元素的累积加和

np.cumprod:元素的累积乘积

np.min:最小值

np.max:最大值

np.percentile:0-100百分位数

np.quantile:0-1分位数

np.median:中位数

np.average:加权平均,参数可以指定weights

np.mean:平均值

np.std:标准差

np.var:方差

广播的概念

规则1:如果两个数组的维度数dim不相同,那么小维度数组的形状将会在左边补1

规则2:如果shape的维度不匹配,但是有维度是1,那么可以扩展维度是1的维度匹配另一个数组;

规则3:如果shape的维度不匹配,但是没有任何一个维度是1,则匹配失败引发错误;

Numpy数组读写到文件

np.load(filename):从.npy或者.npz文件中加载numpy数组

np.save(filename, arr):将单个numpy数组保存到.npy文件中

np.savez(filename, arra=arra, arrb=arrb):将多个numpy数组保存到.npz未压缩的文件格式中

np.savez_compressed(filename, arra=arra, arrb=arrb):将多个numpy数组保存到.npz压缩的文件格式中

线性代数包

求解逆矩阵

B = np.linalg.inv(A)

SVD矩阵分解

U, S, V = np.linalg.svd(A, full_matrices=False)

求解线性方程组

x = np.linalg.solve(A, b)

多项式拟合

params = np.polyfit(x, y, 10)

与其它库的关系

Numpy与Matplotlib的关系

曲线图:plt.plot(x, y)

柱状图:plt.bar(labels, arr)

饼图:plt.pie(arr, labels=labels, autopct='%1.1f%%')

直方图:plt.hist(arr, bins=100, density=1)

Numpy与Pandas的关系

构造Series:series = pd.Series(arr)

构造DataFrame:df = pd.DataFrame(arr, columns = ["ca", "cb", "cc", "cd"])

Series转Numpy:series.values、series.to_numpy()

DataFrame转Numpy:df.values、df.to_numpy()

Numpy与Scikit-learn的关系

数据集是Numpy:data, target = datasets.load_boston(return_X_y=True)

拆分训练集和测试集:X_train, X_test, y_train, y_test = train_test_split(data, target)

训练模型:clf.fit(X_train, y_train)

模型打分:clf.score(X_test, y_test)

模型预估:clf.predict(X_test[:3])

另外,对于Numpy技术的讲解我自己录制成了22集的视频课程:

numpy 索引多个_为什么要学Numpy,一文总结知识点

视频全集地址在爱奇艺搜索“numpy”就能找到我

或者点下方“阅读原文”可以跳转到视频全集

继续阅读