Python中Numpy库的基础知识点

本文的主要内容是根据MOOC中嵩天老师的Python数据分析与展示课程进行总结的,可供读者学习和复习numpy的基础知识点。

MOOC中嵩天老师的课程链接:https://www.icourse163.org/learn/BIT-1001870002?tid=1206192225#/learn/announce

目录

一、NumPy数组的创建与变换

1. 数组的创建

2. NumPy的属性

3. 数组的变换

4. 数组的索引和切片

5. 数组的运算和运算函数

二、NumPy的文件读取和保存

1. CSV文件(用逗号分隔)

2. 多维数据的存取

3. Numpy的便捷文件存取

三、NumPy随机、统计、梯度函数的介绍

1. Numpy的随机函数

2. Numpy的统计函数

3. NumPy的梯度函数

四、图像的手绘效果

1. 图像的数组表示

2. 图像的变换

3. 图像的显示


一、NumPy数组的创建与变换

1. 数组的创建

        可以通过以下几种方法创建数组

(1)从Python中的列表、元组等类型中创建ndarray数组;eg. a = np.array([1,2,3])或者a = np.array((1,2,3));

import numpy as np

a = np.array([1,2,3])
b = np.array((1,2,3))

(2)使用Numpy中函数创建ndarray
常用函数:

函数中shape的地方需要用元组表示,实例:

import numpy as np

a = np.arange(10)        #生成0-9的数组
b = np.ones((3,4))         #生成3×4的全1数组
c = np.zeros((3,4))        #生成3×4的全0数组
d = np.full((2,3),6)     #生成2×3的全是6的数组
e = np.eye(5)            #生成单位矩阵

(3)生成等间隔数组和合并数组:
a = np.linspace(start,stop,N, endpoint=True) 
作用:在起点和终点的区间范围内生成N个数据,因为endpoint=True,所以生成的数组包含最后一个点(默认包含);
temp = np.concatenate((a,b,c,...),axis=n) 
作用:将a,b,c在第n个维度上进行合并,除了合并的维度可以不同,其他的维度必须相同才能进行合并,否则报错。

import numpy as np

a = np.linspace(0,10,6,endpoint=True)    #生成[0,2,4,6,8,10]
b = np.linspace(0,20,6)
temp = np.concatenate((a,b),axis=0) 

(4)以某一数组为蓝本生成新数组:

import numpy as np

a = np.random.rand(3,4)    #生成3×4的随机数组
a1 = np.ones_like(a)       #生成与a具有相同维度的全1数组
a2 = np.zeros_like(a)      #生成与a具有相同维度的全1数组
a3 = np.full_like(a,val)   #生成与a具有相同维度的值全为val的数组

2. NumPy的属性

import numpy as np

array = np.array([[1,2,3],[2,3,4]])
print(array)
print('number of dim:', array.ndim)
print('shape:',array.shape)
print('size:',array.size)

3. 数组的变换


数组元素类型的变换:a.astype(dtype)   
eg.  a = a.astype(int),可以将数组a的数据类型变为整形;
数组变换到列表:list = a.tolist()

4. 数组的索引和切片

索引:维度的索引从0开始,a[0,1,3]表示索引数组a中由第1维第一层、第2维第二层和第3维第四层所确定的数据;
切片:a = np.arange(10), 则a[2:5]表示[2,3,4];  a[2:8:3]表示[2,5];  a[::2]表示[0,2,4,6,8];

5. 数组的运算和运算函数

二、NumPy的文件读取和保存

1. CSV文件(用逗号分隔)

写入:np.savetxt(frame, array, fmt='%.18e', delimiter=None)

frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件;
array:存入文件的数组;
fmt:写入文件的格式,例如:%d %.2f %.18e
delimiter:分割字符串,默认是任何空格,如果是CSV文件,则‘,’;
它可以生成任意带有分割符的文件;
eg: np.savetxt('a.csv', a, fmt = '%d', delimiter = ','); 输出整形
np.savetxt('a.csv', a, fmt = '%.1f', delimiter = ','); 输出带1位小数

读取:np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False)
frame:需要读取的文件,可以是压缩文件;
dtype:需要将文件的数据转化为特定格式,由dtype指定;
delimiter:分割字符串,默认是任何空格,对于CSV文件是',';
unpack:如果True,读入属性将分别写入不同变量;
np.savetxt和np.loadtxt只能存取一维或二维的数据;

2. 多维数据的存取

写入:a.tofile(frame,sep=' ', format='%d');

读取:np.fromfile(frame, dtype=float, count=-1,sep='');

frame:文件、字符串;

dtype:读取的数据类型;

count:读入元素个数,-1表示读入整个文件;

sep:数据分割字符串,如果空串,用二进制读入;

这种读取方法要知道dtype和dim;那怎么办呢,新建一个文件说明;

3. Numpy的便捷文件存取

写入:np.save(fname,array)或np.savez(fname,array)

读取:np.load(fname)

fname:文件名,以.npy为扩展名,压缩扩展名为.npz;

array:数组变量

三、NumPy随机、统计、梯度函数的介绍

1. Numpy的随机函数

随机函数1

np.random.rand(d0,d1,...,dn):产生n维的随机数组,每个元素的值在[0,1)之间均匀分布;

np.random.randn(d0,d1,...,dn):产生n维的随机数组,每个元素值为标准正态分布;

np.random.randint(low,high,shape):生成一个shape形状的在low和high之间随机整数数组;

np.random.seed(s):随机数种子,s是给定的种子值;在使用上述随机函数前使用种子值,可以产生种子值对应的随机数;种子值相同的随机数是相同的。

随机函数2

np.random.shuffle(a): 对a的第一维进行随机排列,改变a;

np.random.permutation(a):产生第一轴乱序的新数组,不改变a本身;

np.random.choice(a,size,replace,p):从一维数组a中以概率p抽取元素,形成size形状新数组,replace表示是否可以重用元素,默认为True;p是和a同尺寸的概率矩阵;

eg: np.random.choice(a.flatten(),(6,8))

随机函数3

np.random.uniform(low,high,shape): 产生具有均匀分布的数组;

np.random.normal(loc,scale,shape): 产生具有正态分布的数据,loc均值,scale标准差,shape形状;

np.random.poission(lam,size): 产生具有泊松分布的数组,lam随机事件发生率,size形状;

2. Numpy的统计函数

NumPy直接提供的统计类函数,如np.std(), np.var(), np.average();

np.sum(a,axis=None): 根据给定轴axis计算数组a相关元素之和,axis等于整数或元组;

np.mean(a,axis=None): 同理,计算平均值;

np.average(a,axis=None,weights=None): 可求加权平均值;

np.std(a,axis=None):计算标准差;

np.var(a,axis=None):计算方差;

np.min(a),np.max(a):计算a中元素的最小值、最大值;

np.argmin(a),np.argmax(a):计算数组中a中元素最小最大值的降一维后下标;

np.unravel_index(index,shape):根据shape将一维下标index转换成多维下标;

np.ptp(a): 计算数组a中元素最大值与最小值的差;

np.median(a): 计算数组a中元素的中位数(中值);

3. NumPy的梯度函数

np.gradient(f): 计算数组f中元素的梯度,当f为多维时,返回每个维度梯度;

梯度:连续值之间的变化率,即斜率;

四、图像的手绘效果

1. 图像的数组表示

    我们平时常见的图像很适合用数组表示;灰度图像就是二维数组,彩色图像是三维图像(在二维的基础上每个元素变为3个);这里使用PIL库(Python Image Library)辅助处理图像,PIL库是一个具有强大图像处理能力的第三方库,常用于处理图像。

引用:from PIL import Image

I = np.array(Image.open('1.jpg')), I就是一个保存着图片数据的数组;

I.shape为(x,y,3); I.dtype为uint8

2. 图像的变换

图像是数组,对数组的操作即可改变图像;

I = np.array(Image.open('1.jpg').convert('L'))  生成灰度图像;

实现图像反转代码:

import numpy as np
from PIL import Image

I = np.array(Image.open('1.jpg').convert('L'))
print(I.shape,I.dtype)
b = 255-I    #如果是三维的彩色数据,则为[255,255,255]-I
im = Image.fromarray(b.astype('uint8'))
im.save('3.jpg')

3. 图像的显示

①对于图像类型的变量,直接运行变量本身就能在命令行中显示图像(本人在Spyder中运行的);

②使用im.show('filename')可以打开一个窗口显示图像,窗口标题是输入的'filename' ;

③另外一种是数组的可视化,图像的可视化推荐使用matplotlib.pyplot中imshow()函数,使用方法如下:

import matplotlib.pyplot as plt
I = np.random.randint(0,255,(200,200)).astype(np.uint8)    #产生随机图像
plt.imshow(I,cmap='gray')    #以灰度显示,默认会是伪彩色

结果:

Guess you like

Origin blog.csdn.net/qq_34917728/article/details/102832887