Numpy快速入门教程

一、numpy简介

numpy是一个由多维数组对象和用于处理数组的例程集合组成的库
numpy中操作的对象: ndarray对象,即ndarray的N维数组类型,描述相同类型的元素集合,每个元素在内存中使用相同大小的块。


二、numpy对象创建方式

#首先导入numpy库
import numpy as np

1、numpy.array()数组函数创建ndarray对象

#np.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

#可直接传入列表
a = np.array([1, 2, 3])

#numpy集合中的数据可以是自定义结构化数据类型
student = np.dtype([('name','S20'),  ('age',  'i1'),  ('marks',  'f4')]) 
a = np.array([('abc',  21,  50),('xyz',  18,  75)], dtype = student)

#numpy每一个内建类型都有一个唯一定义它的字符代码
'b':布尔值
'i':符号整数
'u':无符号整数
'f':浮点
'c':复数浮点
'm':时间间隔
'M':日期时间
'O':Python 对象
'S', 'a':字节串
'U':Unicode
'V':原始数据(void)

2、numpy初始化函数创建ndarray对象

#numpy.empty(shape, dtype = float, order = 'C')    数组元素随机
#numpy.zeros(shape, dtype = float, order = 'C')    数组元素以0填充 
#numpy.ones(shape, dtype = None, order = 'C')      数组元素以1填充
np.empty((2, 2))
np.zeros((2, 3))
np.ones((3, 3))

3、np.asarray函数创建ndarray对象

#numpy.asarray(a, dtype = None, order = None)  类似于numpy.array  可以将python序列转化成ndarray    
#a : 任意形式的输入参数,比如列表,列表的元组,元组,元组的元组,元组的列表
a = np.asarray([1, 2, 3], dtype =  float) 

4、根据数据范围创建ndarray对象

#numpy.arange(start, stop, step, dtype)  step两个字之间的间隔默认为1
x = np.arange(0, 5, 1)

#numpy.linspace(start, stop, num, endpoint, retstep, dtype) 
#num: 表示在start和stop之间返回几个数
#endpoint: 表示是否包含endpoint这个值
x = np.linspace(10,20,5)
x = np.linspace(10,20,5,endpoint=False)

#numpy.logspace(start, stop, num, endpoint, base, dtype)
#base: 返回的是base的幂, base默认是10

三、 ndarray对象常用属性

ndarray.shape     返回包含数组维度的元组,也能调整数组的大小 a.shape = (3, 2)
ndarray.reshape   调整数组维度大小 a.reshape(3, 2)
ndarray.ndim      返回数组的维度
ndarray.itemsize  返回数组中每个元素的字节单位长度

四、numpy常用函数

1、random.randn()

numpy.random.randn()  #从标准正态分布中返回一个或者多个样本
numpy.random.randn()  #不传参数时返回一个样本
numpy.random.randn(n) #返回含有n个元素的一维数组
numpy.random.randn(m, n)  #返回m*n的多维数组

2、sum函数

l = np.array([[1, 2, 3], [4, 5, 6]])
a = l[:,1:].sum()      #a = 16        返回的是一个值
b = l[:,1:].sum(1)     #b = [5, 11]   返回的是一个向量
a = np.sum(l, axis=0)  #a = [5, 7, 9] 按列相加
b = np.sum(l, axis=1)  #b = [6, 15]   按行相加

3、均值函数mean()、 方差函数var()

X = np.array([[1, 2], [3, 4], [5, 6]])
np.mean(X, axis=0, keepdims=True)
np.mean(X, axis=1, keepdims=True)
np.mean(X)
np.var(X, axis=0, keepdims=True)
np.var(X, axis=1, keepdims=True)
np.var(X)

4、numpy.where()函数

1、np.where(conditions,x,y)
2、np.where(conditions) 
根据条件返回满足条件的数组的下标
x = np.arange(16)
x[np.where(x>5)] 
#输出:(array([ 6,  7,  8,  9, 10, 11, 12, 13, 14, 15], dtype=int64),)

x = np.arange(16).reshape(-1,4)
np.where(x>5)
#(array([1, 1, 2, 2, 2, 2, 3, 3, 3, 3], dtype=int64), array([2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))   
#这里返回了两个数组,注意这里是坐标是前面的一维的坐标,后面是二维的坐标

a=numpy.arange(9).reshape(3,3)
a[numpy.where(a[:,0]==0)]  #array([[0, 1, 2]])

五、ndarray对象常用操作

1、切片

a = np.arange(10)
b = a[2:7:2]
b = a[5]
b = a[5:]
b = a[:5]
b = a[2:5]
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
b = a[1:]
#数组切片中...这个意思是指取行或者是列的意思
b = a[..., 1]  #按列取 [2, 4, 5]
b = a[1, ...]  #按行取 [3, 4, 5]
b = a[..., 1:]

2、索引

  • 整数索引
x = np.array([[1,  2],  [3,  4],  [5,  6]]) 
y = x[[0,1,2],  [0,1,0]]
#取得是索引位置为:(0, 0)、(1, 1)、(2, 0)  即[1, 4, 5]

x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])
rows = np.array([[0,0],[3,3]]) 
cols = np.array([[0,2],[0,2]]) 
y = x[rows,cols]  

x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]]) 
# 切片
z = x[1:4,1:3]  
# 对列使用高级索引 
y = x[1:4,[1,2]]
结果y和z相等:
[[ 4  5]
 [ 7  8]
 [10 11]]
  • 布尔索引
x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]]) 
print x[x >  5]  #取大于5的数

a = np.array([np.nan,  1,2,np.nan,3,4,5])  
print a[~np.isnan(a)]  #取非Nan的数

3、数组上的迭代

#numpy包含了一个迭代器对象 numpy.nditer,有效的多维迭代器对象,可以用于在数组上进行迭代
a = np.arange(0,60,5) 
a = a.reshape(3,4)  
for x in np.nditer(a): 
    print(x)  #0 5 10 15 20 25 30 35 40 45 50 55
b = a.T
c = b.copy(order='C')  #以C风格顺序排序
c = b.copy(order='F')  #以F风格顺序排序
for x in np.nditer(c):
    print(x)

#可以通过迭代过程修改数组的值,op_flags参数默认为只读, 改成读写'readwrite'
for x in np.nditer(a, op_flags=['readwrite']): 
    x[...]=2*x 

4、字符串操作

np.char.add(['hello', 'hi'],[' abc', ' xyz'])  #['hello abc' 'hi xyz']  字符串相加
np.char.multiply('Hello ',3)
np.char.center('hello', 20,fillchar = '*')
np.char.capitalize('hello world')   #Hello world  返回字符串副本第一个字母大写
np.char.title('hello how are you?') #返回每个首字母大写
np.char.lower('HELLO')
np.char.upper(['hello','world'])
np.char.split ('YiibaiPoint,Hyderabad,Telangana', sep = ',')
np.char.strip(['arora','admin','java'],'a')  #移除开头或者结尾的特定字符
np.char.join([':','-'],['dmy','ymd'])  #每个字符中间添加
np.char.replace ('He is a good boy', 'is', 'was')

5、其他操作

#数组的转置
a = np.arange(8).reshape(2,4)
a.T  

#数组去重
numpy.unique(arr, return_index, return_inverse, return_counts)
a = np.array([5,2,6,2,7,5,6,8,2,9])
u = np.unique(a)
u,indices = np.unique(a, return_index = True)

numpy.stack(arrays, axis)       #沿新轴连接数组
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
np.stack((a,b),0)  
np.stack((a,b),1)
c = np.hstack((a,b))            #通过堆叠生成水平的单个数组
c = np.vstack((a,b))            #竖直堆叠
numpy.insert()                  #数组插入
numpy.delete()                  #元素删除
numpy.resize(arr, shape)
numpy.append(arr, values, axis) #数组拼接
a = np.array([[1,2,3],[4,5,6]])
np.append(a, [7,8,9])
np.append(a, [[7,8,9]],axis = 0)
np.append(a, [[5,5,5],[7,8,9]],axis = 1

六、numpy有关线性代数相关操作

1、数学算术函数

#三角函数
a = np.array([0, 30, 45, 60, 90])
np.sin(a*np.pi/180)
np.cos(a*np.pi/180)
np.tan(a*np.pi/180)
arcsin、arccos、arctan、numpy.degrees()

#decimals 要舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置
numpy.around(a, decimals) 
numpy.floor()   #向下取整
numpy.ceil()    #向上取整

#add()、 subtract()、 multiply()、 divide()  #ndarray数据之间加减乘除运算

#numpy.power()
a = np.array([10,100,1000])  
np.power(a,2)
b = np.array([1,2,3])
np.power(a,b)

#numpy.mod()  除法余数
a = np.array([10,20,30]) 
b = np.array([3,5,7])
np.mod(a,b)
np.remainder(a,b) #和mod函数功能相同

#统计函数
numpy.amin() 
numpy.amax()

2、矩阵操作

#numpy.dot()   函数返回两个数组的点积,对于二维数组其等效于矩阵乘法
#numpy.vdot()  函数返回两个向量的点积
a = np.array([[1,2],[3,4]]) 
b = np.array([[11,12],[13,14]]) 
print np.vdot(a,b)   #1*11 + 2*12 + 3*13 + 4*14 = 130

#numpy.inner()  函数返回一维数组的向量内积
#numpy.matmul() 函数返回两个数组的矩阵乘积
#numpy.linalg.det()   #计算矩阵的行列式
#numpy.linalg.solve() #给出了矩阵形式的线性方程的解
#numpy.linalg.inv()   #计算矩阵的逆矩阵

#numpy.dot()   函数返回两个数组的点积,对于二维数组其等效于矩阵乘法
#numpy.vdot()  函数返回两个向量的点积
a = np.array([[1,2],[3,4]]) 
b = np.array([[11,12],[13,14]]) 
print np.vdot(a,b)   #1*11 + 2*12 + 3*13 + 4*14 = 130

#numpy.inner()  函数返回一维数组的向量内积
#numpy.matmul() 函数返回两个数组的矩阵乘积
#numpy.linalg.det()   #计算矩阵的行列式
#numpy.linalg.solve() #给出了矩阵形式的线性方程的解
#numpy.linalg.inv()   #计算矩阵的逆矩阵

3、IO文件操作

#ndarray对象可以保存到磁盘文件并从磁盘文件中加载
#load() 和 save() 函数处理numpy二进制文件
#loadtxt() 和 savetxt() 函数处理正常的文本文件
a = np.array([1,2,3,4,5]) 
np.save('outfile',a)
b = np.load('outfile.npy')  

a = np.array([1,2,3,4,5]) 
np.savetxt('out.txt',a) 
b = np.loadtxt('out.txt')  

numpy入门学习笔记,供参考查阅!

猜你喜欢

转载自blog.csdn.net/feilong_csdn/article/details/81558467