NumPy 基础入门

# 来源:NumPy Biginner's Guide 2e ch2
>>> from numpy import *

多维数组

# 创建多维数组
>>> m = array([arange(2), arange(2)])
>>> m
array([[0, 1],[0, 1]])
# 打印形状
>>> m.shape
(2, 2)# 创建 2x2 的矩阵
>>> a = array([[1,2],[3,4]])
>>> a
array([[1, 2],[3, 4]])# 读取矩阵的每个元素
>>> a[0,0]
1
>>> a[0,1]
2
>>> a[1,0]
3
>>> a[1,1]
4

数值类型

类型 描述
bool 布尔值,一位
int 平台相关整数,int32int64
int8 字节(-128 ~ 127
int16 整数(-32768 ~ 32767
int32 整数(-2 ** 31 ~ 2 ** 31 - 1
int64 整数(-2 ** 63 ~ 2 ** 63 - 1
uint8 无符号整数(0 ~ 255
uint16 无符号整数(0 ~ 65535
uint32 无符号整数(0 ~ 2 ** 32 - 1
uint64 无符号整数(0 ~ 2 ** 64 - 1
float16 半精度浮点,符号位,5 位指数,10 位尾数
float32 单精度浮点,符号位,8 位指数,23 位尾数
float64float 双精度浮点,符号位,11 位指数,52 位尾数
complex64 复数,由两个 32 位浮点表示(实部和虚部)
complex128complex 复数,由两个 64 位浮点表示(实部和虚部)
# 每个数据类型都可用作转换函数
>>> float64(42)
42.0
>>> int8(42.0)
42
>>> bool(42)
True
>>> bool(0)
False
>>> bool(42.0)
True
>>> float(True)
1.0
>>> float(False)
0.0# 复数转整数会抛出错误
>>> int(42.0 + 1.j)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: can't convert complex to int

数据类型对象(dtype)

# 从数值类型构造
>>> dtype(float)
dtype('float64')# 从字符代码构造
>>> dtype('f')
dtype('float32')
>>> dtype('d')
dtype('float64')# 从双字符代码构造
>>> dtype('f8')
dtype('float64')# 获取所有字符代码
>>> sctypeDict.keys()
[0, … 'i2', 'int0']# char 属性获取字符代码
>>> t = dtype('Float64')
>>> t.char
'd'# type 属性获取类型
>>> t.type
<type 'numpy.float64'># str 属性获取完整字符串表示
# 第一个字符是字节序,< 表示小端,> 表示大端,| 表示平台的字节序
>>> t.str
'<f8'# 获取大小
>>> t.itemsize
8# 许多函数拥有 dtype 参数
# 传入数值类型、字符代码和 dtype 都可以
>>> arange(7, dtype=uint16)
array([0, 1, 2, 3, 4, 5, 6], dtype=uint16)
类型 字符代码
bool ?, b1
int8 b, i1
uint8 B, u1
int16 h, i2
uint16 H, u2
int32 i, i4
uint32 I, u4
int64 q, i8
uint64 Q, u8
float16 f2, e
float32 f4, f
float64 f8, d
complex64 F4, F
complex128 F8, D
str S(可以在S后面添加数字,表示字符串长度,比如S3表示长度为三的字符串,不写则为最大长度)
unicode U
object O
void V

记录类型

# 定义记录类型
# dtype 传入字段列表,字段用名称和类型表示
>>> t = dtype([('name', str_, 40), ('numitems', int32), ('price', float32)])
>>> t
dtype([('name', '|S40'), ('numitems', '<i4'), ('price','<f4')])# 获取字段
>>> t['name']
dtype('|S40')# 使用记录类型创建数组
# 否则它会把记录拆开
>>> itemz = array([('Meaning of life DVD', 42, 3.14), ('Butter', 13,2.72)], dtype=t)
>>> itemz[1]
('Butter', 13, 2.7200000286102295)

操作形状

>>> b = 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]]])# ravel 将数组展开,创建视图
>>> b.ravel()
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])# flatten 将数组展开,创建副本
>>> b.flatten()
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])# reshape 用于设置数组形状
# 总数必须一致
>>> b.shape = (6,4)
>>> b
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]])# 用于转置矩阵
>>> b.transpose()
array([[ 0,  4,  8, 12, 16, 20],[ 1,  5,  9, 13, 17, 21],[ 2,  6, 10, 14, 18, 22],[ 3,  7, 11, 15, 19, 23]])# resize 用于原地设置形状
# 其它和 reshape 相同
>>> b.resize((2,12))
>>> b
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]])

堆叠

>>> a = arange(9).reshape(3,3)
>>> a
array([[0, 1, 2],[3, 4, 5],[6, 7, 8]])
>>> b = 2 * a
>>> b
array([[ 0,  2,  4],[ 6,  8, 10],[12, 14, 16]])# 二维数组的轴
# 0:竖直,1:水平
# 三维数组的轴
# 0:纵深,1:竖直,2:水平# 水平堆叠
>>> hstack((a, b))
array([[ 0,  1,  2,  0,  2,  4],[ 3,  4,  5,  6,  8, 10],[ 6,  7,  8, 12, 14, 16]])
# 也可以使用 concatenate,指定轴 1(二维数组的水平轴)
>>> concatenate((a, b), axis=1)
array([[ 0,  1,  2,  0,  2,  4],[ 3,  4,  5,  6,  8, 10],[ 6,  7,  8, 12, 14, 16]])# 竖直堆叠
>>> vstack((a, b))
array([[ 0,  1,  2],[ 3,  4,  5],[ 6,  7,  8],[ 0,  2,  4],[ 6,  8, 10],[12, 14, 16]])
# 也可以使用 concatenate,指定轴 0(二维数组的数值轴,默认值)
>>> concatenate((a, b), axis=0)
array([[ 0,  1,  2],[ 3,  4,  5],[ 6,  7,  8],[ 0,  2,  4],[ 6,  8, 10],[12, 14, 16]])# 纵深堆叠
# 沿第三个轴(深度)堆叠
>>> dstack((a, b))
array([[[ 0,  0],[ 1,  2],[ 2,  4]],[[ 3,  6],[ 4,  8],[ 5, 10]],[[ 6, 12],[ 7, 14],[ 8, 16]]])# 按列堆叠
# 对于一维数组,column_stack 使一维数组变成二维数组的列
>>> oned = arange(2)
>>> oned
array([0, 1])
>>> twice_oned = 2 * oned
>>> twice_oned
array([0, 2])
>>> column_stack((oned, twice_oned))
array([[0, 0],[1, 2]])
# 对于二维数组,就是 hstack
>>> column_stack((a, b))
array([[ 0,  1,  2,  0,  2,  4],[ 3,  4,  5,  6,  8, 10],[ 6,  7,  8, 12, 14, 16]])
>>> column_stack((a, b)) == hstack((a, b))
array([[ True,  True,  True,  True,  True,  True],[ True,  True,  True,  True,  True,  True],[ True,  True,  True,  True,  True,  True]], dtype=bool)# 按行堆叠
# 对于一维数组,row_stack 使一维数组变成二维数组的行
>>> row_stack((oned, twice_oned))
array([[0, 1],[0, 2]])
# 对于二维数组,就是 vstack
>>> row_stack((a, b))
array([[ 0,  1,  2],[ 3,  4,  5],[ 6,  7,  8],[ 0,  2,  4],[ 6,  8, 10],[12, 14, 16]])
>>> row_stack((a,b)) == vstack((a, b))
array([[ True,  True,  True],[ True,  True,  True],[ True,  True,  True],[ True,  True,  True],[ True,  True,  True],[ True,  True,  True]], dtype=bool)

分割

>>> a
array([[0, 1, 2],[3, 4, 5],[6, 7, 8]])# 水平分割,指明分割为多少块
# 不能均分时报错
>>> hsplit(a, 3)
[array([[0],[3],[6]]),array([[1],[4],[7]]),array([[2],[5],[8]])]
# 也可以使用 split 函数指定轴 1(二维数组的水平轴)
>>> split(a, 3, axis=1)
[array([[0],[3],[6]]),array([[1],[4],[7]]),array([[2],[5],[8]])]
# 竖直分割,指明分割为多少块
# 不能均分时报错
>>> vsplit(a, 3)
[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7,8]])]
# 也可以使用 split 函数指定轴 0(二维数组的竖直轴)
>>> split(a, 3, axis=0)
[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7,8]])]# 纵深分割
# 我们需要一个三维数组
>>> c = arange(27).reshape(3, 3, 3)
>>> c
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]]])
>>> dsplit(c, 3)
[array([[[ 0],[ 3],[ 6]],[[ 9],[12],[15]],[[18],[21],[24]]]),array([[[ 1],[ 4],[ 7]],[[10],[13],[16]],[[19],[22],[25]]]),array([[[ 2],[ 5],[ 8]],[[11],[14],[17]],[[20],[23],[26]]])]

属性

# ndim 获取数组维度
>>> b
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]])
>>> b.ndim
2# size 获取元素数量
>>> b.size
24# itemsize 获取元素大小
>>> b.itemsize
8# 这两个乘起来就是数组的大小 nbytes
>>> b.nbytes
192
>>> b.size * b.itemsize
192# T 属性用于获取转置,和 tranpose 函数一样
>>> b.resize(6,4)
>>> b
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]])
>>> b.T
array([[ 0,  4,  8, 12, 16, 20],[ 1,  5,  9, 13, 17, 21],[ 2,  6, 10, 14, 18, 22],[ 3,  7, 11, 15, 19, 23]])# 但如果数组是一维的,我们只能得到它的视图
>>> b.ndim
1
>>> b.T
array([0, 1, 2, 3, 4])# NumPy 中的复数用 j 表示
>>> b = array([1.j + 1, 2.j + 3])
>>> b
array([ 1.+1.j,  3.+2.j])
>>> b.dtype
dtype('complex128')
>>> b.dtype.str
'<c16'# real 用于获取实部
>>> b.real
array([ 1.,  3.])# imag 用于获取虚部
>>> b.imag
array([ 1.,  2.])# flat 属性获取 numpy.flatiter 对象,它是一个迭代器,用于遍历所有元素
>>> b = arange(4).reshape(2,2)
>>> b
array([[0, 1],[2, 3]])
>>> f = b.flat
>>> f
<numpy.flatiter object at 0x103013e00>
>>> for item in f: print item
0
1
2
3# 也可以直接索引 flatiter 对象
>>> b.flat[2]
2# 或者多个元素
>>> b.flat[[1,3]]
array([1, 3])# flat 属性是可设置的,修改 flat 属性的值会修改原始数组
# 设置所有元素
>>> b.flat = 7
>>> b
array([[7, 7],[7, 7]])
# 或者仅仅设置某个元素
>>> b.flat[[1,3]] = 1
>>> b
array([[7, 1],[7, 1]])

转换

# 转换为 Python 列表
>>> b
array([ 1.+1.j,  3.+2.j])
>>> b.tolist()
[(1+1j), (3+2j)]# astype 转换数组中的元素类型
# 复数转为整数时会丢掉虚部
>>> b
array([ 1.+1.j,  3.+2.j])
>>> b.astype(int)
/usr/local/bin/ipython:1: ComplexWarning: Casting complex values to real discards the imaginary part#!/usr/bin/python
array([1, 3])

NumPy 基础入门相关推荐

  1. 数据分析--NumPy基础入门-1

    文章目录 数据类型 列表和数组 NumPy NumPy的引用 N维数组对象:ndarray ndarray 属性 ndarray数组的创建方法 从Python中的列表,元组等类型创建ndarray数组 ...

  2. NumPy基础入门学习

    对于习惯使用了MATLAB的用户而言,学习NumPy这个python工具包付出的成本应该是不大的. NumPy的基本的object是多维数组,是一个有同样类型的数字等构成的一张表格,能够通过元组进行索 ...

  3. 收藏 | 深度学习之Numpy基础入门教程!

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散   计算机视觉联盟笔记   作者:王博Kings.Sophia (Numerical Python) 是 Pytho ...

  4. NumPy Beginner's Guide 2e 带注释源码 二、NumPy 基础入门

    # 来源:NumPy Biginner's Guide 2e ch2 >>> from numpy import * 多维数组 # 创建多维数组 >>> m = a ...

  5. AI基础:Numpy简易入门

    本文提供最简易的 Numpy 的入门教程,适合初学者.(黄海广) 1.Numpy 简易入门 NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型.矢量处理,以及精密 ...

  6. NumPy 快速入门系列:应用统计学基础概念、相关统计指标与NumPy的实现

    NumPy 快速入门系列:应用统计学基础概念.相关统计指标与NumPy的实现 前言: 统计学导论: 统计学定义: 统计学分类: 统计学基本概念: 统计过程: 统计指标与NumPy: 用 Python ...

  7. numpy基础篇-简单入门教程4

    numpy基础篇-简单入门教程4 np.set_printoptions(precision=3),只显示小数点后三位 np.random.seed(100)rand_arr = np.random. ...

  8. 【一】零基础入门深度学习:用numpy实现神经网络训练

    (给机器学习算法与Python学习加星标,提升AI技能) 作者 | 毕然 百度深度学习技术平台部主任架构师 内容来源 | 百度飞桨深度学习集训营 本文转自飞桨PaddlePaddle 本课程是百度官方 ...

  9. 《Python数据分析基础教程:NumPy学习指南(第2版)》笔记1:第一章 NumPy快速入门

    NumPy快速入门 1.1 Python NumPy是基于Python的,因此在安装NumPy之前,需要先安装Python.某些操作系统已经默认安装有Python环境,但仍需检查Python的版本是否 ...

最新文章

  1. CMake Error: CMake was unable to find a build program corresponding to Ninja.
  2. Javascript进阶:匿名函数详解
  3. 关于用notepad++确认代码中\r\n\t空格等不显示的字符
  4. boost::hana::test::TestLogical用法的测试程序
  5. TLS/SSL握手过程
  6. 数学和计算机的应用视频教学反思,数学多媒体教学反思.doc
  7. 为什么大学要学一堆纸上谈兵的课程?(转)
  8. 【Siddhi】Siddhi的语法关键字
  9. 召唤新一代超参调优开源新神器,集十大主流模块于一身
  10. javascript权威指南 学习笔记之变量作用域
  11. 洛谷-神奇的幻方-NOIP2015提高组复赛
  12. 弘辽科技:直通车总集篇(下篇)
  13. KeilC51使用详解 (三)
  14. 内存溢出(OutOfMemoryError)与栈溢出(StackOverflowError)
  15. ‘XXXX’ was compiled with optimization - stepping may behave oddly; variables may not be available
  16. 我是这样来做破解qq,做QQ外挂的 【-】
  17. 【Linux】Linux文件锁
  18. Windows显卡切换
  19. USACO-The Castle
  20. 【翻译论文】 Supervised Parametric Classification of Aerial LiDAR Data(2004)

热门文章

  1. NetofficeSystem协同办公系统今日发布
  2. webpack4.x中使用postcss-loader、autoprefixer给CSS属性自动添加前缀
  3. 【ZZ】国外大型网站使用到编程语言 | 菜鸟教程
  4. Xshell远程连接CentOS-7版的Linux
  5. springmvc错点集结
  6. 使用内存映射文件来共享数据
  7. LDMS 8.8 简明使用手册之客户端配置及部署
  8. ASP.NET网站SESSION丢失的问题
  9. filezilla的root账户无法连接服务器解决办法
  10. VueJs入门(一)