Numpy学习笔记——Numpy基础
来源:互联网 发布:魏颖 知乎 编辑:程序博客网 时间:2024/06/09 07:00
2.1 NumPy 数组对象
NumPy中的ndarray是一个多维数组对象,该对象由两部分组成:
实际的数据;
描述这些数据的元数据。
NumPy数组一般是同质的。
用arange函数创建数组并获取其维度:
arr.shape:返回的tuple元组
In: a = arange(5)In: a.dtypeOut: dtype('int64')In: a.shape
2.2 创建多维数组
array函数可以依据给定的对象生成数组。给定的对象应是类数组,如Python中的列表,返回的是numpy.ndarray。
In: m = array([arange(2), arange(2)])In: mOut:array([[0, 1], [0, 1]])In: m.shapeOut: (2, 2)
2.2.1 选取数组元素
给array函数传递的对象是一个嵌套的列表,
In: a = array([[1,2],[3,4]])In: aOut:array([[1, 2], [3, 4]])In: a[0,0]Out: 1
2.2.2 NumPy 数据类型
bool 用一位存储的布尔类型(值为TRUE或FALSE)
inti 由所在平台决定其精度的整数(一般为int32或int64)
int8 整数,范围为.128至127
int16 整数,范围为.32 768至32 767
int32 整数,范围为.231至231 .1
int64 整数,范围为.263至263 .1
uint8 无符号整数,范围为0至255
uint16 无符号整数,范围为0至65 535
uint32 无符号整数,范围为0至232.1
uint64 无符号整数,范围为0至264.1
float16 半精度浮点数(16位):其中用1位表示正负号,5位表示指数,10位表示尾数
float32 单精度浮点数(32位):其中用1位表示正负号,8位表示指数,23位表示尾数
float64或float 双精度浮点数(64位):其中用1位表示正负号,11位表示指数,52位表示尾数
complex64 复数,分别用两个32位浮点数表示实部和虚部
complex128或complex 复数,分别用两个64位浮点数表示实部和虚部
每一种数据类型均有对应的类型转换函数:
需要注意的是,复数是不能转换为整数的,同样,复数也不能转换为浮点数。不过,浮点数却可以转换为复数,例如complex(1.0).有j的部分为复数的虚部。
In: float64(42)Out: 42.0In: int8(42.0)Out: 42In: bool(42)Out: TrueIn: bool(0)Out: FalseIn: bool(42.0)Out: TrueIn: float(True)Out: 1.0In: float(False)Out: 0.0
在NumPy中,许多函数的参数中可以指定数据类型:
In: arange(7, dtype=uint16)Out: array([0, 1, 2, 3, 4, 5, 6], dtype=uint16)
2.2.3 数据类型对象
数据类型对象是numpy.dtype类的实例,数据类型对象可以给出单个数组元素在
内存中占用的字节数
In: a.dtype.itemsizeOut: 8
2.2.4 字符编码
创建了一个单精度浮点数数组:
In: arange(7, dtype='f')Out: array([ 0., 1., 2., 3., 4., 5., 6.], dtype=float32)In: arange(7, dtype='D')Out: array([ 0.+0.j, 1.+0.j, 2.+0.j, 3.+0.j, 4.+0.j, 5.+0.j, 6.+0.j])
2.2.5 自定义数据类型
可以使用Python中的浮点数类型:
完整的NumPy数据类型列表可以在sctypeDict.keys()中找到
In: dtype(float)Out: dtype('float64')
2.2.6 dtype 类的属性
获取数据类型的字符编码:
In: t = dtype('Float64')In: t.charOut: 'd'In: t.typeOut: <type 'numpy.float64'>In: t.strOut: '<f8'
2.3 动手实践:创建自定义数据类型
创建数据类型:
t = np.dtype([('name', np.str_, 40), ('numitems', np.int32), ('price',np.float32)])
查看数据类型:
In: t['name']Out: dtype('|S40')
创建自定义数据类型的数组
In: itemz = array([('Meaning of life DVD', 42, 3.14), ('Butter', 13,2.72)], dtype=t)In: itemz[1]Out: ('Butter', 13, 2.7200000286102295)
2.4 一维数组的索引和切片
In: a = arange(9)In: a[3:7]Out: array([3, 4, 5, 6])In: a[:7:2]Out: array([0, 2, 4, 6])In: a[::-1]Out: array([8, 7, 6, 5, 4, 3, 2, 1, 0])
2.5 多维数组的切片和索引
用arange函数创建一个数组并改变其维度:
下面是一个从1维数组变为3维数组,2表示第一维上有两个元素,3表示第二维上有3个元素…是一个2×3×4的三维数组
In: b = arange(24).reshape(2,3,4)In: b[0,0,0]In: bOut:array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9,10,11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]])Out: 0In: b[:,0,0]Out: array([ 0, 12])//多个冒号可以用一个省略号(...)来代替In: b[0, :, :]In: b[0, ...]
2.6 动手实践:改变数组的维度
ravel:将数组展平,是返回数组的一个视图,flatten函数会请求分配内存来保存结果
In: bOut:array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9,10,11]], [[12,13,14,15], [16,17,18,19], [20,21,22,23]]])In: b.ravel()Out:array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,17, 18, 19, 20, 21, 22, 23])In: b.flatten()Out:array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,17, 18, 19, 20, 21, 22, 23])//用一个正整数元组来设置数组的维度In: b.shape = (6,4)
transpose 转置矩阵
resize resize和reshape函数的功能一样,但resize会直接修改所操作的数组
In: b.transpose()In: b.resize((2,12))
2.7 数组的组合
(1) 水平组合
In: a = arange(9).reshape(3,3)In: aOut:array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])In: b = 2 * aIn: bOut:array([[ 0, 2, 4], [ 6, 8, 10], [12, 14,16]])In: hstack((a, b))Out:array([[ 0, 1, 2, 0, 2, 4], [ 3, 4, 5, 6, 8,10], [ 6, 7, 8,12,14,16]])In: concatenate((a, b), axis=1)
(2) 垂直组合:
In: vstack((a, b))Out:array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 0, 2, 4], [ 6, 8,10], [12,14,16]])In: concatenatel((a, b), axis = 0)Out:array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 0, 2, 4], [ 6, 8,10], [12,14,16]])
(3) 深度组合
In: dstack((a, b))Out:array([[[0, 0], [1, 2], [2, 4]], [[3, 6], [4, 8], [5,10]], [[6,12], [7,14], [8,16]]])
(4) 列组合 column_stack函数对于一维数组将按列方向进行组合:
In: oned = arange(2)In: onedOut: array([0, 1])In: twice_oned = 2 * onedIn: twice_onedOut: array([0, 2])In: column_stack((oned, twice_oned))Out:array([[0, 0], [1, 2]])In: column_stack((a, b))Out:array([[ 0, 1, 2, 0, 2, 4], [ 3, 4, 5, 6, 8,10], [ 6, 7, 8,12,14,16]])//可以用==运算符来比较两个NumPy数组In: column_stack((a, b)) == hstack((a, b))
(5) 行组合 当然,NumPy中也有按行方向进行组合的函数
In: row_stack((oned, twice_oned))Out:array([[0, 1], [0, 2]])
2.9 数组的分割
(1) 水平分割
In: aOut:array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])In: hsplit(a, 3)Out:[array([[0], [3], [6]]),array ([[1], [4], [7]]),array ([[2], [5], [8]])]In: split(a, 3, axis=1)
(2) 垂直分割:
In: vsplit(a, 3)Out: [array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]In: split(a, 3, axis=0)
(3) 深度分割:
In: c = arange(27).reshape(3, 3, 3)In: cOut:array([[[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8]], [[ 9,10,11], [12,13,14], [15,16,17]], [[18,19,20], [21,22,23], [24,25,26]]])In: dsplit(c, 3)
2.11 数组的属性
ndim属性,给出数组的维数,或数组轴的个数
size属性,给出数组元素的总个数
itemsize属性,给出数组中的元素在内存中所占的字节数
T属性的效果和transpose函数一样:
In: b.T
在NumPy中,复数的虚部是用j表示的:
In: b = array([1.j + 1, 2.j + 3])
real属性,给出复数数组的实部:
In: b.real
imag属性,给出复数数组的虚部:
In: b.imag
flat属性将返回一个numpy.flatiter对象,这是获得flatiter对象的唯一方式,“扁平迭代器”可以让我们像遍历一维数组一样去遍历任意的多维数组:
In: b = arange(4).reshape(2,2)In: f = b.flatIn: for item in f: print itemIn: b.flat[2]In: b.flat[[1,3]]
2.12 动手实践:数组的转换
使用tolist函数将NumPy数组转换成Python列表:
In: b.tolist()
- Numpy学习笔记——Numpy基础
- Numpy学习笔记——NumPy模块
- Numpy基础学习笔记
- Numpy 基础学习笔记
- numpy学习笔记二:numpy基础
- numpy基础——numpy.argsort
- numpy基础——numpy.tile
- numpy基础——numpy.sum
- 《numpy学习指南》学习笔记——数组
- Numpy学习笔记——常用函数
- Numpy学习笔记——便捷函数
- 机器学习笔记(六):numpy基础
- numpy 基础学习笔记(1)
- numpy 基础学习笔记(2)
- Numpy基础笔记
- [笔记]NumPy基础操作
- Numpy基础笔记
- Python笔记——Python基础、numpy基础、SciPy、Matplotlib
- windowser server 2012 r2 8080外网访问端口发布设置
- $.ajax提交时防止数据重复
- Tensorflow之MNIST解析
- 正则表达式验证是否为ip
- python(二)
- Numpy学习笔记——Numpy基础
- SQLadvisor安装测试
- knn最近邻算法原理与实现
- PHP Ajax动态列表的后退操作——保存列表内容和点击位置
- Mathf类
- CPU对外设IO端口物理地址的编程方式
- 查询数据库某个字段相同值的出现次数大于两次的列表
- poj 3714 分治加剪枝
- thinkjs学习-this.assign传递数据和ajax调用后台接口