一、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入门学习笔记,供参考查阅!