numpy 中reshape四个参数 numpy中的reshape函数_numpy 拼接

我们需要了解一下 numpy 的应用场景

NumPy提供了大量的数值编程工具,可以方便地处理向量、矩阵等运算,极大地便利了人们在科学计算方面的工作。另一方面,Python是免费,相比于花费高额的费用使用Matlab,NumPy的出现使Python得到了更多人的青睐

查看 numpy 版本

import numpy
numpy.version.full_version

numpy 中reshape四个参数 numpy中的reshape函数_numpy 拼接_02

数组

NumPy中的基本对象是同类型的多维数组(homogeneous multidimensional array),这和C++中的数组是一致的,例如字符型和数值型就不可共存于同一个数组中。先上例子

a = numpy.arange(20)

numpy 中reshape四个参数 numpy中的reshape函数_numpy 中reshape四个参数_03

通过函数reshape,我们可以重新构造一下这个数组,例如,我们可以构造一个4*5的二维数组,其中reshape的参数表示各维度的大小,且按各维顺序排列(两维时就是按行排列,这和R中按列是不同的):

a = a.reshape(4,5)

numpy 中reshape四个参数 numpy中的reshape函数_numpy 中reshape四个参数_04

构造更高维的也没问题:

a = a.reshape(2,2,5)

numpy 中reshape四个参数 numpy中的reshape函数_numpy 拼接_05

既然aarray,我们还可以调用array的函数进一步查看a的相关属性:ndim查看维度;shape查看各维度的大小;size查看全部的元素个数,等于各维度大小的乘积;dtype可查看元素类型;dsize查看元素占位(bytes)大小

numpy 中reshape四个参数 numpy中的reshape函数_numpy reshape函数_06

创建数组

数组的创建可通过转换列表实现,高维数组可通过转换嵌套列表实现:

raw = [0,1,2,3,4]
a = numpy.array(raw)

numpy 中reshape四个参数 numpy中的reshape函数_numpy 矩阵拼接_07

raw = [[0,1,2,3,4], [5,6,7,8,9]]
b = numpy.array(raw)

numpy 中reshape四个参数 numpy中的reshape函数_numpy 拼接_08

一些特殊的数组有特别定制的命令生成,如4*5的全零矩阵:

d = (4, 5)
numpy.zeros(d)

numpy 中reshape四个参数 numpy中的reshape函数_numpy 矩阵拼接_09

默认生成的类型是浮点型,可以通过指定类型改为整型:

d = (4, 5)
numpy.ones(d, dtype=int)

numpy 中reshape四个参数 numpy中的reshape函数_numpy 矩阵求逆_10

[0, 1)区间的随机数数组:

numpy.random.rand(5)

numpy 中reshape四个参数 numpy中的reshape函数_numpy 中reshape四个参数_11

数组操作

简单的四则运算已经重载过了,全部的+-*/运算都是基于全部的数组元素的,以加法为例:

numpy 中reshape四个参数 numpy中的reshape函数_numpy 拼接_12

numpy 中reshape四个参数 numpy中的reshape函数_numpy 矩阵求逆_13

类似C++,+=-=*=/=操作符在NumPy中同样支持:

numpy 中reshape四个参数 numpy中的reshape函数_numpy 矩阵求逆_14

开根号求指数也很容易:

numpy 中reshape四个参数 numpy中的reshape函数_numpy 拼接_15

需要知道二维数组的最大最小值怎么办?想计算全部元素的和、按行求和、按列求和怎么办?for循环吗?不,NumPy的ndarray类已经做好函数了:

numpy 中reshape四个参数 numpy中的reshape函数_numpy reshape函数_16

数组元素访问

数组和矩阵元素的访问可通过下标进行,以下均以二维数组(或矩阵)为例:

numpy 中reshape四个参数 numpy中的reshape函数_numpy 矩阵求逆_17

可以通过下标访问来修改数组元素的值:

numpy 中reshape四个参数 numpy中的reshape函数_numpy 矩阵求逆_18

现在问题来了,明明改的是a[0][1],怎么连b[0][1]也跟着变了?这个陷阱在Python编程中很容易碰上,其原因在于Python不是真正将a复制一份给b,而是将b指到了a对应数据的内存地址上。想要真正的复制一份ab,可以使用copy

numpy 中reshape四个参数 numpy中的reshape函数_numpy 拼接_19

若对a重新赋值,即将a指到其他地址上,b仍在原来的地址上:

numpy 中reshape四个参数 numpy中的reshape函数_numpy 中reshape四个参数_20

利用:可以访问到某一维的全部数据,例如取矩阵中的指定列:

numpy 中reshape四个参数 numpy中的reshape函数_numpy 拼接_21

数组操作

还是拿矩阵(或二维数组)作为例子,首先来看矩阵转置:

numpy 中reshape四个参数 numpy中的reshape函数_numpy 矩阵拼接_22

矩阵求逆:

numpy 中reshape四个参数 numpy中的reshape函数_numpy 矩阵求逆_23

求特征值和特征向量

numpy 中reshape四个参数 numpy中的reshape函数_numpy reshape函数_24

按列拼接两个向量成一个矩阵:

numpy 中reshape四个参数 numpy中的reshape函数_numpy 中reshape四个参数_25

在循环处理某些数据得到结果后,将结果拼接成一个矩阵是十分有用的,可以通过vstackhstack完成:

numpy 中reshape四个参数 numpy中的reshape函数_numpy 矩阵求逆_26

缺失值

缺失值在分析中也是信息的一种,NumPy提供nan作为缺失值的记录,通过isnan判定。

numpy 中reshape四个参数 numpy中的reshape函数_numpy reshape函数_27

nan_to_num可用来将nan替换成0,在后面会介绍到的更高级的模块pandas时,我们将看到pandas提供能指定nan替换值的函数。

numpy 中reshape四个参数 numpy中的reshape函数_numpy 矩阵求逆_28

NumPy还有很多的函数

最后献上NumPy SciPy Pandas Cheat Sheet

numpy 中reshape四个参数 numpy中的reshape函数_numpy reshape函数_29