为什么要用numpy

Python中提供了list容器,可以当作数组使用。但列表中的元素可以是任何对象,因此列表中保存的是对象的指针,这样一来,为了保存一个简单的列表[1,2,3]。就需要三个指针和三个整数对象。对于数值运算来说,这种结构显然不够高效。

Python虽然也提供了array模块,但其只支持一维数组,不支持多维数组,也没有各种运算函数。因而不适合数值运算。

NumPy的出现弥补了这些不足。

import numpy as np

数组创建

常规创建方法a = np.array([2,3,4])

b = np.array([2.0,3.0,4.0])

c = np.array([[1.0,2.0],[3.0,4.0]])

d = np.array([[1,2],[3,4]],dtype=complex) # 指定数据类型

print a, a.dtype

print b, b.dtype

print c, c.dtype

print d, d.dtype

输出结果

[2 3 4] int32

[ 2. 3. 4.] float64

[[ 1. 2.]

[ 3. 4.]] float64

[[ 1.+0.j 2.+0.j]

[ 3.+0.j 4.+0.j]] complex128

创建数组的常用函数print np.arange(0,7,1,dtype=np.int16) # 0为起点,间隔为1时可缺省(引起歧义下不可缺省)

print np.ones((2,3,4),dtype=np.int16) # 2页,3行,4列,全1,指定数据类型

print np.zeros((2,3,4)) # 2页,3行,4列,全0

print np.empty((2,3)) #值取决于内存

print np.arange(0,10,2) # 起点为0,不超过10,步长为2

print np.linspace(-1,2,5) # 起点为-1,终点为2,取5个点

print np.random.randint(0,3,(2,3)) # 大于等于0,小于3,2行3列的随机整数

输出结果

[0 1 2 3 4 5 6]

[[[1 1 1 1]

[1 1 1 1]

[1 1 1 1]]

[[1 1 1 1]

[1 1 1 1]

[1 1 1 1]]]

[[[ 0. 0. 0. 0.]

[ 0. 0. 0. 0.]

[ 0. 0. 0. 0.]]

[[ 0. 0. 0. 0.]

[ 0. 0. 0. 0.]

[ 0. 0. 0. 0.]]]

[[ 1.39069238e-309 1.39069238e-309 1.39069238e-309]

[ 1.39069238e-309 1.39069238e-309 1.39069238e-309]]

[0 2 4 6 8]

[-1. -0.25 0.5 1.25 2. ]

[[1 0 1]

[0 1 0]]

类型转换print float(1)

print int(1.0)

print bool(2)

print float(True)

输出结果

1.0

1

True

1.0

数组输出

从左到右,从上向下

一维数组打印成行,二维数组打印成矩阵,三维数组打印成矩阵列表

print np.arange(1,6,2)

print np.arange(12).reshape(3,4) # 可以改变输出形状

print np.arange(24).reshape(2,3,4)# 2页,3行,4页

输出结果

[1 3 5]

[[ 0 1 2 3]

[ 4 5 6 7]

[ 8 9 10 11]]

[[[ 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 = np.array([1,2,3,4])

b = np.arange(4)

print a, b

print a-b

print a*b

print a**2

print 2*np.sin(a)

print a>2

print np.exp(a) # 指数

输出结果

[1 2 3 4] [0 1 2 3]

[1 1 1 1]

[ 0 2 6 12]

[ 1 4 9 16]

[ 1.68294197 1.81859485 0.28224002 -1.51360499]

[False False True True]

[ 2.71828183 7.3890561 20.08553692 54.59815003]

##矩阵运算(二维数组)

a = np.array([[1,2],[3,4]]) # 2行2列

b = np.arange(6).reshape((2,-1)) # 2行3列

print a,b

print a.dot(b) # 2行3列

输出结果

[[1 2]

[3 4]] [[0 1 2]

[3 4 5]]

[[ 6 9 12]

[12 19 26]]

##非数组运算,调用方法

a = np.random.randint(0,5,(2,3))

print a

print a.sum(),a.sum(axis=1),a.sum(0) # axis用于指定运算轴(默认全部,可指定0或1)

print a.min(),a.max(axis=1),a.mean(axis=1) # axis = 0: 按列计算,axis = 1: 按行计算

print a.cumsum(1) # 按行计算累积和

输出结果

[[2 3 3]

[0 2 1]]

11 [8 3] [2 5 4]

0 [3 2] [ 2.66666667 1. ]

[[2 5 8]

[0 2 3]]

索引,切片,迭代##一维数组

a = np.arange(0,10,1)**2

print a

print a[0],a[2],a[-1],a[-2] # 索引从0开始,-1表示最后一个索引

print a[2:5],a[-5:-1] # 包括起点,不包括终点

a[-1] = 100; print a # 赋值

a[1:4]=100; print a # 批量赋值

a[:6:2] = -100; print a # 从开始到第6个索引,每隔一个元素(步长=2)赋值

print a[: :-1];print a # 将a逆序输出,a本身未发生改变

b = [np.sqrt(np.abs(i)) for i in a]; print b # 通过遍历赋值

输出结果

[ 0 1 4 9 16 25 36 49 64 81]

0 4 81 64

[ 4 9 16] [25 36 49 64]

[ 0 1 4 9 16 25 36 49 64 100]

[ 0 100 100 100 16 25 36 49 64 100]

[-100 100 -100 100 -100 25 36 49 64 100]

[ 100 64 49 36 25 -100 100 -100 100 -100]

[-100 100 -100 100 -100 25 36 49 64 100]

[10.0, 10.0, 10.0, 10.0, 10.0, 5.0, 6.0, 7.0, 8.0, 10.0]

##多维数组

a = np.arange(0,20).reshape((4,5))

print a, a[2,3], a[:,1], a[1:4,2], a[1:3,:]

print a[-1] # 相当于a[-1,:],即索引少于轴数时,确实的索引默认为整个切片

b = np.arange(0,24).reshape((2,3,4))

print b,b[1] # 相当于b[1,:,:] 和b[1,...]

print '-------------------'

for row in a:

print row # 遍历以第一个轴为基础

输出结果

[[ 0 1 2 3 4]

[ 5 6 7 8 9]

[10 11 12 13 14]

[15 16 17 18 19]] 13 [ 1 6 11 16] [ 7 12 17] [[ 5 6 7 8 9]

[10 11 12 13 14]]

[15 16 17 18 19]

[[[ 0 1 2 3]

[ 4 5 6 7]

[ 8 9 10 11]]

[[12 13 14 15]

[16 17 18 19]

[20 21 22 23]]]

[[12 13 14 15]

[16 17 18 19]

[20 21 22 23]]

[0 1 2 3 4]

[5 6 7 8 9]

[10 11 12 13 14]

[15 16 17 18 19]

形状操作a = np.floor(10*np.random.random((3,4)))

print a, a.shape #输出a的形状

print a.ravel() # 输出平坦化后的a(a本身不改变)

a.shape = (6,2); print a # 改变a的形状

print a.transpose() # 输出a的转置

输出结果

[[ 0. 4. 3. 2.]

[ 1. 1. 3. 3.]

[ 4. 4. 6. 5.]] (3, 4)

[ 0. 4. 3. 2. 1. 1. 3. 3. 4. 4. 6. 5.]

[[ 0. 4.]

[ 3. 2.]

[ 1. 1.]

[ 3. 3.]

[ 4. 4.]

[ 6. 5.]]

[[ 0. 3. 1. 3. 4. 6.]

[ 4. 2. 1. 3. 4. 5.]]

##补充:reshape和resize

a = np.array([[1,2,3],[4,5,6]])

b = a

a.reshape((3,2))# 不改变数组本身的形状

print a

b.resize((3,2))# 改变数组本身形状

print b

输出结果

[[1 2 3]

[4 5 6]]

[[1 2]

[3 4]

[5 6]]

python中的array是什么意思_python中数组(numpy.array)的基本操作相关推荐

  1. python里删除range里的数字_python中range函数与列表中删除元素

    一.range函数使用 range(1,5)   代表从1到4(不包含5),结果为:1,2,3,4   ,默认步长为1 range(1,5,2)   结果为:1, 3  (同样不包含5) ,步长为2 ...

  2. python中int占几个字节_Python中的整型占多少个字节?

    说到计算机中的整型,相信很多人都会联想到32位整型(或者int),是程序员日常生活中用的最多的一种类型.32位整型顾名思义,占用32个位也就是4个字节,取值范围−2,147,483,648~ 2,14 ...

  3. python之33个关键字详解_Python 中的关键字 with 详解

    在 Python 2.5 中,with关键字被加入.它将常用的 try ... except ... finally ...模式很方便的被复用.看一个最经典的例子: with open('file.t ...

  4. python中字典和集合的区别_Python中字典和集合学习小结

    映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元组等 包含可变对象的列表. ...

  5. python 函数参数前面两个星号_Python中参数前面一个星号两个星号(*参数,**参数)起什么作用呢?...

    摘要: 下文讲述Python中参数前面一个星号两个星号的功能分享,如下所示: 在Python语言中,我们经常看见参数前面 加上一个星号或两个星号 那么这些写法到底起什么作用呢? 下文将一一道来,如下所 ...

  6. python异常处理时所使用的保留字_Python中,下列哪个保留字不用于异常处理______________。_学小易找答案...

    [单选题]维持细胞生存所必需的最基本的基因是 ( ) [单选题]从体细胞克隆高等哺乳动物的成功说明了 ( ) [单选题]细胞决定与细胞分化的关系是 ( ) [多选题]一种类型的分化细胞转变成另-种类型 ...

  7. python中的列表是指针吗_Python中的指针——到底指什么(二)

    在 Python中的指针--到底指什么(一) 中,我们知道在Python的一切都是对象,变量其实是指向PyObject对象的名称,对不可变变量进行操作后,名称指向了另一个PyObject. 扣留对象 ...

  8. python中遍历字典判断是否存在_python中如何判断值在不在字典中

    python中判断值在不在字典中的方法:我们可以通过for循环来进行判断.在python中for循环可以遍历任何序列的项目.语法结构:[for iterating_var in sequence:st ...

  9. python语言中print函数的作用_python中如何使用print函数

    Python中print语句 1.逗号分隔符 在Python中print语句可根据sys.stdout中包含的文件生成输出,它接受一个逗号分隔的对象表,如下实例:x = 1 y = 2 z = 3 p ...

最新文章

  1. mysql 事务id_[转]MySQL 5.6 全局事务 ID(GTID)实现原理(一)
  2. vs2015 ctrl 单击 转到定义
  3. 计算机攻防网站在线对攻,对攻
  4. python爬虫能干什么-总算发现python爬虫能够干什么
  5. PostgreSQL 客户端乱码问题
  6. SAP直接踢人下线 SM04
  7. php 队列取并集,PHP实现对数组简单求交集,差集,并集功能示例
  8. MySQL修改字符集步骤(字段插入中文提示错误时解决办法)
  9. c语言程序设计实训教材,C语言程序设计实训指导书
  10. 信息学奥赛一本通 1970:【15NOIP普及组】扫雷游戏 | OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 | 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏
  11. 【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手
  12. Python入门+进阶 第1章 Python入门导学(无论何时,只要开始就不晚)
  13. C#人脸识别入门篇-STEP BY STEP人脸识别—静态照片人脸检测
  14. UCOS操作系统——系统内部任务(六)
  15. 可以在树莓派上使用的交互式抠图软件
  16. html中如何调整图片的对比色,风光照片如何调出冷暖对比色?后期案例分享
  17. 深圳中院判决:利用网络爬虫技术抓取他人数据构成不正当竞争
  18. android视频采集
  19. 人脸检测之Ultra-Light-Fast-Generic-Face-Detector-1MB
  20. python3跑通smpl模型_SMPL模型学习

热门文章

  1. 就“敏捷软件开发(第二版)”书评答译者
  2. Scratch冰雹猜想
  3. 稳压二极管主要参数及选型(及常见电阻封装的可过的电流)
  4. JavaScript爬取网页并分析
  5. 《计算机视觉之三维重建》笔记1-数学基础
  6. Java--如何创建目录或文件
  7. JAVA中如何创建一个文件
  8. 鼠标事件(事件类型)
  9. 机器学习(周志华)算法目录
  10. 人工智能中的顶级期刊