numpy 笔记
1 矩阵、数组、列表
#from numpy import *
import numpy as np
矩阵创建
>>> A = np.array([1,2,3])
array([1, 2, 3])
>>> A = np.mat(A)
matrix([[1, 2, 3]])
>>> np.shape(A)
(1, 3)
>>> B = np.matrix([1,2,3])
>>> np.shape(b)
(1, 3) # 基本属性
>>>A = np.array([[2],[1]])
>>>A.ndim #维度 dimension = 2
>>>m,n = A.shape #m=2, n=1
>>>number = A.size #元素总数 = 2
>>>A.dtype #元素类型 dtype('int64')
>>>A.itemsize #字节大小 = 8
>>>A.reshape(1,2) #重构
>>>np.resize(A, (1,2)) #重构
常用数组,快速创建
>>>np.zeros((3,3)) #零矩阵,参数是一个tuple类型(3,3)
>>>np.ones((2,4)) #1矩阵,默认浮点型,可以使用dtype=int
>>>np.random.rand(2,2) #随机阵
>>>np.random.randint(10,size=(3,3)) #0-10之间的随机整数矩阵
>>>np.random.randint(2,8,size=(2,5)) #2-8之间的随机整数矩阵
>>>np.eye(2,2,dtype=int) #单位阵, n=行,M=列,k=对角索引
>>>np.diag([1,2,3]) #对角阵
>>>np.identity(5) #单位阵
>>>np.linspace(10,20, 5, endpoint = False) #等差数列 array([10., 12., 14., 16., 18.])
>>>np.logspace(1, 4, num=10, base=2) #等比数列 array([2., 4., 8., 16.])
>>>np.empty(A.shape)
>>>np.empty([3,2], dtype = int) #空数组
array([[ 0, 1072168960],
[ 0, 1072168960],
[ 0, 0]])
数组操作
>>>A = np.arange(12, dtype = np.int8).reshape(3,4)
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]], dtype=int8)
>>>B = np.array([np.nan, 1, 2, np.nan, 3, 4, 5])
array([nan, 1., 2., nan, 3., 4., 5.]) # 索引
>>>A[[0,2],[3,1]] #array([3, 9])
>>>np.arange(10)[2:7:2] #array([2, 4, 6])
>>>A[A>5] #array([ 6, 7, 8, 9, 10, 11], dtype=int8)
>>>B[~np.isnan(B)] #判断缺失,缺失也可用None表示,np.iscomplex() 判断复数
array([1., 2., 3., 4., 5.]) # 展开
>>>A.flatten() #展开,返回副本
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], dtype=int8)
>>>A.ravel() #展开,按需返回副本
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], dtype=int8) # 广播 / 压缩
# 不同维度数据运算时,维度自动扩充,并按该维度第一个元素带入运算
>>>x = np.array([[1], [2], [3]])
>>>y = np.array([4, 5, 6])
>>>[u + v for (u,v) in np.broadcast(x,y)]
[5, 6, 7, 6, 7, 8, 7, 8, 9]
>>>x+y
array([[5, 6, 7],
[6, 7, 8],
[7, 8, 9]])
>>>np.squeeze(x) #删除一维
>>>np.broadcast_to(y, (3,1)) #广播为指定格式
>>>np.expand_dims(y, axis=0) #插入维度 # 迭代
# order:'C' — 按行,'F' — 按列,'A' — 原顺序,'k' — 元素在内存中的出现顺序
>>>a = np.arange(12).reshape(3,4)
>>>for i in a: print(i, end=' ')
[0 1 2 3] [4 5 6 7] [ 8 9 10 11]
>>>for i in np.nditer(a, order='C'): print(i, end=' ') #多维迭代器,深度迭代 , 不指定时a.T与a迭代序列一致
0 1 2 3 4 5 6 7 8 9 10 11 # 广播迭代
>>>a = np.arange(0,60,5).reshape(3,4)
>>>b = np.array([1, 2, 3, 4], dtype = int)
>>>for x,y in np.nditer([a,b]): print("%d:%d" % (x,y), end=' ')
0:1 5:2 10:3 15:4 20:1 25:2 30:3 35:4 40:1 45:2 50:3 55:4 # 克隆
>>>b = a; c=a.copy() #,order = 'C'|‘F’
>>>id(b) == id(a); id(c) == id(a) #True, False
矩阵运算
>>>A = np.array([[1,2],[3,4]])
>>>B = np.array([[11,12],[13,14]])
>>>A*B #点积
array([[11, 24],
[39, 56]])
>>>A*2 #点积
>>>np.multiply(A, B) #点积,对应元素相乘,同A*B
>>>np.vdot(A, B) #点积和,对应相乘相加 = 130 >>>np.mat(A)*np.mat(B) #矩阵乘法
matrix([[37, 40],
[85, 92]])
>>>np.matmul(A, B) #同np.mat(A)*np.mat(B), 维度不同时,广播
>>>np.dot(A, B) #同np.mat(A)*np.mat(B)
>>>A.dot(B) #同np.mat(A)*np.mat(B) >>>np.inner(A, B) #内积, 最后一维
array([[35, 41],
[81, 95]]) >>>A = mat(eye(2,2)*0.5)
>>>A.I #逆矩阵
>>>A.T #转置
>>>np.square(A) #平方
>>>np.sqrt(A) #开方 # 线性代数
>>>np.linalg.det(a) #行列式
>>>np.linalg.solve(b, [0,2]) #线性方程组求解
>>>np.linalg.inv(x) #逆矩阵
矩阵切片、分割、合并
>>>A = np.mat(np.random.randint(2,8,size=(3,4))) #2-8之间的随机整数矩阵
matrix([[5, 4, 6, 3],
[7, 3, 4, 2]
[0, 5, 3, 1]])
>>>A[1:,1:] #切片
matrix([[3, 4, 2]
[5, 3, 1]]) >>>A=mat(np.ones((2,2)))
matrix([[ 1., 1.],
[ 1., 1.]])
>>>B=np.mat(np.eye(2))
matrix([[ 1., 0.],
[ 0., 1.]]) # 分割
>>>a = np.arange(9)
>>>np.split(a, 3) #等分
[array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])]
>>>np.split(a, [4,7]) #指定位置分割
[array([0, 1, 2, 3]), array([4, 5, 6]), array([7, 8])]
>>>a = np.arange(16).reshape(4,4)
>>>np.hsplit(a, 2)
>>>np.vsplit(a, 2) # 拼接
>>>np.concatenate((a,b)) #默认axis=0 纵向拼接
>>>np.concatenate((a,b), axis=1) #横向拼接
>>>np.stack((a,b),0) #纵向拼接
>>>np.stack((a,b),1) #横向拼接
>>>np.vstack((A, B)) #按列合并
matrix([[ 1., 1.],
[ 1., 1.],
[ 1., 0.],
[ 0., 1.]])
>>>np.hstack((A, B)) #按行合并
matrix([[ 1., 1., 1., 0.],
[ 1., 1., 0., 1.]]) # 追加
>>>a = np.array([[1,2,3],[4,5,6]])
>>>np.append(a, [7,8,9]) #转为一维数组
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>>np.append(a, [[7,8,9]], axis=0) #纵向拼接
array([[1,2,3],
[4,5,6],
[7,8,9])
>>>np.append(a, [[0,0,0],[7,8,9]], axis=1) #横向拼接
array([[1, 2, 3, 0, 0, 0],
[4, 5, 6, 7, 8, 9]]) # 插入
>>>np.insert(a,2,[11,12,13]) #序列对应位置插入
array([ 1, 2, 11, 12, 13, 3, 4, 5, 6])
>>>np.insert(a,1,[11],axis = 0) #纵向插入,广播
array([[ 1, 2, 3],
[11, 11, 11],
[ 4, 5, 6]])
>>>np.insert(a,1,11,axis = 1) #横向插入,广播
array([[ 1, 11, 2, 3],
[ 4, 11, 5, 6]]) # 删除
>>>np.delete(a, 5)
>>>np.delete(a, 1, axis=0)
>>>np.delete(a, 1, axis=1)
>>>np.delete(a, np.s_[::2]) # 去重
>>>np.unique(a)
array([1, 2, 3, 4, 5, 6])
>>>np.unique(a, return_index = True) #返回索引
(array([1, 2, 3, 4, 5, 6]), array([0, 1, 2, 3, 4, 5], dtype=int64))
>>>np.unique(a,return_inverse = True) #返回下标
>>>np.unique(a,return_counts = True) #返回重复数
矩阵、数组、列表间类型转换
>>>A = [[1,2],[3,2],[5,2]] #列表
[[1, 2], [3, 2], [5, 2]]
>>>B = np.array(A) #列表 -> 数组
>>>B = np.asarray(A) #列表 -> 数组
array([[1, 2],
[3, 2],
[5, 2]])
>>>C = np.mat(A) #列表 -> 矩阵
matrix([[1, 2],
[3, 2],
[5, 2]])
>>>np.array(C) #矩阵 -> 数组
array([[1, 2],
[3, 2],
[5, 2]])
>>>C.getA() #矩阵 -> 数组
array([[1,2]
[3,2]
[5,2]])
>>>C.tolist() #矩阵 -> 列表
[[1, 2], [3, 2], [5, 2]]
>>>B.tolist() #数组 -> 列表
[[1, 2], [3, 2], [5, 2]] # 注意: 一维矩阵与一维数组转列表结果不一致
>>>A = np.array([1,2,3])
array([1, 2, 3])
>>>B = np.mat([1,2,3])
matrix([[1, 2, 3]])
>>>C = A.tolist() #数组 -> 列表
[1, 2, 3]
>>>D = B.tolist() #矩阵 -> 列表
[[1, 2, 3]]
>>> (C==D)
False
>>> (C is D[0]) #矩阵表示成了二维形式
True
2 字符串操作
>>>np.char.add(['hello', 'hi'],['abc', 'xyz']) #类似R的paste0
array(['helloabc'], dtype='<U8')
>>>np.char.multiply('Hello',3) #类似R的rep
array('HelloHelloHello', dtype='<U15')
# 格式
>>>np.char.center('hello', 20, fillchar = '*')
array('*******hello********', dtype='<U20')
>>>np.char.capitalize('hello world')
array('Hello world', dtype='<U11')
>>>np.char.title('hello how are you?')
array('Hello How Are You?', dtype='<U18')
>>>np.char.lower(['HELLO','WORLD'])
array(['hello', 'world'], dtype='<U5')
>>>np.char.upper(['hello','world'])
array(['HELLO', 'WORLD'], dtype='<U5')
# 拆分
>>>np.char.split ('YiibaiPoint,Hyderabad,Telangana', sep = ',')
array(list(['YiibaiPoint', 'Hyderabad', 'Telangana']), dtype=object)
>>>np.char.splitlines('hello\rhow are you?')
array(list(['hello', 'how are you?']), dtype=object)
# 压缩
>>>np.char.strip(['arora','admin','java'],'a')
array(['ror', 'dmin', 'jav'], dtype='<U5')
>>>np.char.join([':','-'],['dmy','ymd'])
array(['d:m:y', 'y-m-d'], dtype='<U5')
# 替换
>>>np.char.replace ('He is a good boy', 'is', 'was')
array('He was a good boy', dtype='<U17')
# 编码、解码
>>>np.char.encode('hello', 'cp500')
array(b'\x88\x85\x93\x93\x96', dtype='|S5')
>>>np.char.decode(b'\x88\x85\x93\x93\x96','cp500')
array('hello', dtype='<U5')
3 数学运算
>>>a = np.array([0,30,45,60,90])
>>>b = np.sin(a * np.pi/180)
>>>np.degrees(b) # 四舍五入
>>>np.around(a, decimals = -1)
>>>np.floor(a)
>>>np.ceil(a) # 数组加减乘除
>>>np.add(a,b)
>>>np.subtract(a,b)
>>>np.multiply(a,b)
>>>np.divide(a,b) # 其他操作
>>>np.reciprocal(a) # 倒数
>>>np.power(a,b) # a数组为底,b为幂
>>>np.mod(a,b) # 数组a/b余数
>>>np.remainder(a,b) # 余数 # 复数操作
>>>np.real(a)
>>>np.imag(a)
>>>np.conj(a) # 共轭复数
>>>np.angle(a, deg = True) # 统计操作
>>>np.min(a, 0) #列最小值
>>>np.max(a, 1) #行最大值
>>>np.amin(a, 0) #数组纵向最小,但参数表示全局
>>>np.amax(a, 1) #数组横向最大
>>>np.mean(a, axis = 0) #均值
>>>np.sum(a, axis=0) #列和
>>>np.average([1,2,3,4], weights=[4,3,2,1], returned=True) #加权均值,返回权值和?
>>>np.std([1,2,3,4]) #标准差
>>>np.var([1,2,3,4]) #方差
>>>std = sqrt(mean((x - x.mean())**2))
>>>np.ptp(a, axis = 0) # 极差
>>>np.percentile(a,50, axis = 1) # 分位数
>>>np.median(a, axis = 0) # 中位数 # 排序、排序索引
# kind = quicksort(默认), mergesort, heapsort
>>>a = np.array([[3,7],[9,1]])
>>>np.sort(a) # 按行
>>>np.sort(a, axis=0) # 按列 >>>a = np.array([3, 1, 2])
>>>np.argsort(a) # 按行排序索引
array([1, 2, 0], dtype=int64)
>>>a[np.argsort(a)]
>>>argmin(a, axis=0) # 列最小值行索引
>>>argmax(a, axis=1) >>>dt = np.dtype([('name', 'S10'),('age', int)])
>>>a = np.array([("raju",21),("anil",25),("ravi",17),("amar",27)], dtype = dt)
>>>np.sort(a, order = 'name') # 按name
array([(b'amar', 27), (b'anil', 25), (b'raju', 21), (b'ravi', 17)], dtype=[('name', 'S10'), ('age', '<i4')]) >>>key = ('b','c','d','a')
>>>s = ('raju','anil','ravi','amar')
>>>np.lexsort((s,key))
array([3, 0, 1, 2], dtype=int64) >>>np.nonzero(a) #非零元素索引
>>>np.where(x > 3) #满足指定条件的元素位置索引
>>>x = np.arange(9.).reshape(3, 3)
>>>condition = np.mod(x,2)==0
>>>np.extract(condition, x) #满足条件的元素,条件为逻辑值
array([0., 2., 4., 6., 8.])
numpy 笔记的更多相关文章
- python numpy笔记:给matlab使用者
利用Numpy,python可以进行有效的科学计算.本文给过去常用matlab,现在正学习Numpy的人. 在进行矩阵运算等操作时,使用array还是matrix?? 简短的回答,更多的时候使用arr ...
- python numpy笔记(重要)
1.np.array 的shape (2,)与(2,1)含义 ndarray.shape:数组的维度.为一个表示数组在每个维度上大小的整数元组.例如二维数组中,表示数组的“行数”和“列数”. ndar ...
- Numpy 笔记: 多维数组的切片(slicing)和索引(indexing)【转】
目录 切片(slicing)操作 索引(indexing) 操作 最简单的情况 获取多个元素 切片和索引的同异 切片(slicing)操作 Numpy 中多维数组的切片操作与 Python 中 lis ...
- numpy笔记—ravel和c_命令(区别flatten)
np.c_给numpy数组添加列 np.r_给numpy数组添加行 ravel(): 将多维数组降成一维, 返回的是视图
- numpy笔记—np.squeeze用法
import numpy as np x = np.array([[[0], [1], [2]]]) print(x.shape) d = np.squeeze(x) # 从数组的形状中删除单维条目, ...
- numpy笔记
numpy数组切片 import numpy as np arr = np.empty((8, 3))for i in range(8): arr[i] == i arr[1,2] # 选取第1行第2 ...
- Python pandas & numpy 笔记
记性不好,多记录些常用的东西,真·持续更新中::先列出一些常用的网址: 参考了的 莫烦python pandas DOC numpy DOC matplotlib 常用 习惯上我们如此导入: impo ...
- NumPy笔记-ndarray
ndarray,N维数组对象(矩阵) 所有元素必须是相同类型 ndim属性,维度个数 shape属性,各维度大小 dtype属性,数据类型 创建ndarray np.array(collection) ...
- numpy笔记—np.sum中keepdims作用
A = np.random.randn(4,3) B = np.sum(A, axis = 1, keepdims = True) 我们使用(keepdims = True)来确保 A.shape 是 ...
随机推荐
- Java 将图片转成base64,传到前台展示
后台代码: public String getBase64(SysFile sysFile){ String imgStr = ""; try { File file = new ...
- html页面技巧
Query获取Select选择的Text和Value: 语法解释: 1. $("#select_id").change(function(){//code...}); //为S ...
- CPU的硬件结构和汇编语言
(已更正) 这个问题包括CPU的硬件结构和汇编语言的范畴. 这里梳理一下. 首先, 题主"李建国"自问自答的部分说的是正确的, CPU的指令集是软件与CPU这两个层级之间的接口, ...
- shelly - HYMN TO INTELLECTUAL BEAUTY
HYMN TO INTELLECTUAL BEAUTY III No voice from some sublimer world hath ever To sage or poet these r ...
- ios scrollView代理的用法
// // ZQRViewController.m // 03-图片缩放 // // Created by apple on 17-08-25. // #import "ZQRViewCon ...
- 一种基于SDR实现的被动GSM嗅探
软件定义无线电(SDR)是一种无线电通信系统,简单来说,就是通过数字信号处理技术在通用可编程数字信号处理硬件平台上,利用软件定义来实现无线电台的各单元功能,从而对无线电信号进行调制.解调.测量.SDR ...
- python之pandas简单介绍及使用(一)
python之pandas简单介绍及使用(一) 一. Pandas简介1.Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据 ...
- python day03作业
- C#类中字段封装为属性
本文描述内容转载 https://zhidao.baidu.com/question/1174413218458798139.html 感谢 冥冥有你PD 的解答!!! 问题思索1 类成员包括变量和方 ...
- FreeModbus LINUXTCP Compile ERROR
/********************************************************************************* * FreeModbus LINU ...