numpy总结

阅读https://www.runoob.com/numpy/numpy-tutorial.html后的总结

1.基本概念

1.Numpy可以操作N维数组对象ndarray
2.基本初始化
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
object:数组或者嵌套数组(多维)
dtype:元素类型
copy:对象是否需要复制
order:方向,C为行,F为列,A为任意
subok:默认返回一个与基类类型一致的数组
ndmin:指定生成数组的最小维度
例子:np.array([1,2,3]) 一维
np.array([[1,2],[3,4]]) 二维
3.关于dtype
正确指定dtype可以减少内存占用
dtype的类型:
b :布尔型
i :有符号整型
u:无符号整型
f:浮点型 
S:字符串
U:Unicode
(1)数组只有一种类型,可以直接指定
np.array([1,2,3],dtype=np.dtype('<i1'))
'<i1' 的含义:
"<"意味着小端法(最小值存储在最小的地址,即低位组放在最前面)。
"i" 表示带符号整数
"1"表示1个字节,可以表示的整数范围为0~255

2.初始化

1.通过构造函数:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

2.np.empty() 指定形状,空的数组(值为随机的)
np.empty([3,2], dtype = int) 

3.np.zeros()指定形状,用0填充
np.zeros([3,2], dtype = int) 

4.np.ones()指定形状,用1填充
np.ones([3,2], dtype = int) 

5.np.asarray() 通过已有的列表或元组创建
np.asarray([1,2,3],dtype=int)
np.asarray((1,2,3),dtype=int)

6.np.frombuffer() 读取流,转化为数组对象
np.frombuffer(b'hello',dtype='S1')

7.np.fromiter() 从可迭代对象创建
np.fromiter({1,2,3},dtype=int)

8.np.arange() 从数值范围创建
类似于range()
np.arange(10,20,2)  #[10 12 14 16 18] 从10到20 步长为2

9.np.linespace() 以等差数列创建
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
num:生成元素数量
endpoint:是否包含stop值

10.np.logspace()以等比数列创建
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)

3.切片和索引

1.可以适用全部对list的切片和索引操作
2.省略号切片
a = np.array([[1,2,3],[3,4,5],[4,5,6]])  
第一个元素是列,第二个元素是行
print (a[...,1])   # 第2列元素
print (a[1,...])   # 第2行元素
print (a[...,1:])  # 第2列及剩下的所有元素
3.整数数组索引
获取(0,0),(1,1)和(2,0)位置处的元素
x = np.array([[1,  2],  [3,  4],  [5,  6]]) 
y = x[[0,1,2],  [0,1,0]]  
4.布尔索引:获取符合指定条件的元素
x[x >  5] #大于5的元素
5.花式索引
获取指定索引的行
x=np.arange(32).reshape((8,4))
x[[4,2,1,7]]
获取指定索引的列
x[...,[3,  0]]

4.numpy广播

1.数组计算时,如果shape相同,则直接对应位计算
2.shape不相同时,触发广播机制

广播的规则:
让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加 1 补齐。
输出数组的形状是输入数组形状的各个维度上的最大值。
如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为 1 时,这个数组能够用来计算,否则出错。
当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。
简单理解:对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:
数组拥有相同形状。
当前维度的值相等。
当前维度的值有一个是 1。
若条件不满足,抛出 "ValueError: frames are not aligned" 异常。
例子:
a = np.array([[ 0, 0, 0], [10,10,10], [20,20,20], [30,30,30]])
b = np.array([1,2,3]) print(a + b)
#输出
[[ 1  2  3]
 [11 12 13]
 [21 22 23]
 [31 32 33]]
5.迭代

1.迭代
按行依次迭代每个元素:
    for x in np.nditer(a): 
    for x in a.flat

按列迭代每个元素:
for x in np.nditer(a, order = 'F'): 

迭代每一列
for x in np.nditer(a, flags = ['external_loop'], order = 'F'): 

迭代每一行
for row in a: 

2.迭代时修改元素值
for x in np.nditer(a, op_flags=['readwrite']): 

6.数组操作

1.修改数组形状 reshape()
2.展开数组为一维 
flatten() 拷贝原数组后展开,不影响原数组
ravel() 直接展开,修改会影响原数组
3.翻转数组(转置)
transpose()
a.T
4.将数组广播到新形状
a = np.arange(4)
np.broadcast_to(a,(4,4))
5.从给定数组的形状中删除一维的条目
numpy.squeeze(arr, axis)
6.连接数组
numpy.concatenate((a1, a2, ...), axis)
7.分割数组
一维分割 numpy.split(ary, indices_or_sections, axis)
水平分割 numpy.hsplit()
垂直分割 numpy.vsplit()
8.添加与删除
重新指定大小 resize(a,(3,3))
添加值np.append(a,[])
插入np.insert(a,1,11,axis=1)
删除np.delete(a,1,axis=1)
去除重复元素 np.unique(a)

7.字符串函数

可以对数组中每个字符串元素执行相同的函数操作
1.字符串连接
np.char.add(a,b)
2.元素重复
np.char.multiply(a,3)
3.第一个字母转大写
np.char.capitalize(a)
4.每个单词的第一个字母转换为大写:
numpy.char.title(a)
5.转小写
np.char.lower(a)
6.转大写
np.char.upper(a)
7.分割
np.char.split(a,sep='.')
8.移除开头或结尾的
np.char.strip(a,' ')
9.连接join()
10.替换replace()

8.数学、算术、统计函数、线性代数函数

1.四舍五入
np.round(a,decimals) #decimals小数位数
2.向下取整
np.floor(a)
3.向上取整
np.ceil(a)
4.加减乘除
add(a,b),substract(),multiply(),divide() #符合广播规则
5.倒数
np.reciprocal(a)
6.求幂
np.power(a,2)
7.求余数
np.mod(a,b)或np.remainder(a,b)
8.求最大最小值
全部数据的最大最小值 np.amin(a) ,np.amax(a)
横向最大最小值 np.amin(a,axis=0),np.amax(a,axis=0)
纵向最大最小值 np.amin(a,axis=1),np.amax(a,axis=1)
9.求最大值减去最小值
全部np.ptp(a)
横 axis = 0 ,纵1
10.求中位数
np.median(a,axis)
11.算术平均值
np.mean(a,axis)
12.加权平均值
np.average(a,b) #b为权重
13.标准差
np.std(a)
14.方差
np.var(a)
15.数组点积
np.dot(a,b) 如果是一维数组,则为内积;二维数组,为矩阵乘积
16.向量点积
np.vdot(a,b) 展开为一维计算
17.向量内积
np.inner(a,b)
18.矩阵乘积
np.matmul(a,b)
19.其他:行列式、线性方程解、逆矩阵

9.排序、条件筛选

1.sort(a,axis,kind,order) 
axis:不指定,展开为1维;=1按列;=0按行(相当于np.msort())
kind:默认为'quicksort',还可以指定为mergesort,heapsort
order要排序的字段
2.argsort()
返回的是数组值从小到大的索引值
3.lexsort()
多序列排序 ##没看懂...
4.numpy.argmax() 和 numpy.argmin()
沿给定轴返回最大和最小元素的索引。
5.numpy.nonzero()
非零元素的索引。
6.np.where(x>3)
返回输入数组中满足给定条件的元素的索引。
7.根据某个条件从数组中抽取元素,返回满条件的元素
np.extrct(np.mod(a,2)==0) 选取偶数元素

10.矩阵库

1.初始化
np.matlib.empty((2,2),dtype=int) 随机数据
np.matlib.zeros((2,2),dtype=int) 0填充
np.matlib.eye(n =  3, M =  4, k =  0, dtype =  float) 3行4列,对角线元素为1
np.matlib.identity(5, dtype = float) 5行5列,对角线元素为1
np.matlib.rand(3,3) 3行3列,随机填充
11.ndarray序列化

1.保存np.save('file.npy',a)
2.读取a = np.load('file.npy')
3.保存与读取多个数组
np.savez('file.npz',a,b,c_key = c)
读取r = np.load('file.npz')
a = r['arr_0']
b = r['arr_1']
c = r['c_key+']
4.用文本保存
np.savetxt('a.txt',a,fmt='%d',delimiter=',')
读取np.loadtxt('a.txt')
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值