Numpy学习笔记

Numpy学习笔记

Numpy是Python的一个数值计算库

image-20200417173629136

Numpy使用ndarray对象来处理多维数据

image-20200417173933479

np.array创建darray

image-20200417174218829

Numpy的优势

image-20200417174258761

ndarray的元素是连续存储的,因此随机读写性能会好

image-20200417174411233

ndarray的属性

image-20200417174546268

关键且常用的属性就是shape和dtype

常见的类型:

image-20200417174717028

在创建ndarray时,我们可以指定类型:

image-20200417174805083

如果不指定,整数默认是int64,小数默认是float64

数组修改类型:

image-20200417180604852

生成数组的方式

image-20200417175131625

linspace第三个参数表示生成的数组中元素的个数

np.arange的用法和python的range比较像,但是它是可以生成小数,而range只能是整数

我们可以使用np.round来确定小数的保留位数

image-20200417222007911

均匀分布和正态分布

均匀分布:np.random.uniform(low,high,size)

low: 采样下界,float类型,默认值为0;
high: 采样上界,float类型,默认值为1;
size: 输出样本数目,为int或元组(tuple)类型,例如,size=(m,n,k), 则输出m*n*k个样本,缺省时输出1个值。

正态分布:np.random.normal(loc,scale,size)

loc:float

概率分布的均值,对应着整个分布的中心center

scale:float

概率分布的标准差,对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高

size:int or tuple of ints

输出的shape,默认为None,只输出一个值

数组变形

image-20200417180203636

数组序列化

image-20200417180627348

输出为:

image-20200417180656776

数组去重

image-20200417180721367

其实python也有一个内置的去重函数叫set(),但是其传入的只能是一维数组,我们也可以将ndarray通过 数组名.flatten()压缩为一维再使用

逻辑运算

  1. 直接对数组中元素值进行布尔运算,返回布尔数组:

    image-20200417181037358

  2. 对于上面返回的布尔数组,可以再次传入原始数组中从而获取值为True的元素组成的数组

    image-20200417181147218

  3. 还可以对上面的数组直接赋值

    image-20200417181226510

    也就是对满足表达式的元素直接赋值。省去了for循环

  4. image-20200417181355423

  5. image-20200417181457395

    注意上面逻辑与和逻辑或的用法

统计运算

image-20200417181847866

可以选择按行统计还是按列统计

image-20200417181955566

image-20200417182105539

可以用ndarray.方法名,也可以用np.函数名

argmin返回的是最小值的位置而不是最小值

数组间运算

image-20200417182405098

数组与数的运算实质是数和数组中所有元素的运算

数组之间也可以运算:

image-20200417222200507

可以看到,宽度一致时,是一层一层相减的。但是这样要求t7的长必须为1,t7要是两层的话就不行了。同样地,t7如果是一列也可以算

矩阵运算

numpy中数组和矩阵不是一种类型,矩阵的存储使用的是matrix数据类型,当然用ndarray也没什么问题

使用np.mat来创建matrix

矩阵乘法:

对于ndarray类型的话:

image-20200417215413284

对于matrix类型,直接使用*即可

数组的合并与分割

image-20200417215722359

hstack是对数组进行水平拼接,而vstack是进行垂直拼接

image-20200417215817843

np.concatenate可以进行水平和垂直拼接,但是需要传入参数来确定是怎么拼接

image-20200417220003922

np.split可以传入要分割的个数(此时默认每个里的元素数量是相同的),也可以按下标分割,例如上图中第二个例子将前3个、4-5个等等分成不同组

文件的读取和数据处理

image-20200417220215329

读取csv

但是这样的读取是存在问题的:

原csv是这样:

image-20200417220343691

读出来是这样:

image-20200417220323716

(nan:not a number)

对于字符串会自动读成nan,因为ndarray中元素的类型需要是一样的,所以不能第一行是字符串而剩下的是数。这个nan的类型和其他元素的类型保持一致

我们可以看到原本的数据中其实就是有两个缺失值的,这个一般怎么处理呢?一种方法是,如果我们的数据够多,就可以直接删除这个缺失值所在的样本;另外一个思路是求缺失值所在的那一列的平均值填入,具体函数如下:

image-20200417221006313

所以我们一般不用numpy来读文件,而只用它来处理文件

而对于数据处理,pandas更为方便

原文地址:https://www.cnblogs.com/jiading/p/12801132.html