Python Numpy 数组的初始化和基本操作


Posted in Python onMarch 13, 2018

Python 是一种高级的,动态的,多泛型的编程语言。Python代码很多时候看起来就像是伪代码一样,因此你可以使用很少的几行可读性很高的代码来实现一个非常强大的想法。

一.基础:

Numpy的主要数据类型是ndarray,即多维数组。它有以下几个属性:

ndarray.ndim:数组的维数
ndarray.shape:数组每一维的大小
ndarray.size:数组中全部元素的数量
ndarray.dtype:数组中元素的类型(numpy.int32, numpy.int16, and numpy.float64等)
ndarray.itemsize:每个元素占几个字节

例子:

>>> import numpy as np
>>> a = np.arange(15).reshape(3, 5)
>>> a
array([[ 0, 1, 2, 3, 4],
    [ 5, 6, 7, 8, 9],
    [10, 11, 12, 13, 14]])
>>> a.shape
(3, 5)
>>> a.ndim
2
>>> a.dtype.name
'int64'
>>> a.itemsize
8
>>> a.size
15
>>> type(a)
<type 'numpy.ndarray'>
>>> b = np.array([6, 7, 8])
>>> b
array([6, 7, 8])
>>> type(b)
<type 'numpy.ndarray'>

二.创建数组:

使用array函数讲tuple和list转为array:

>>> import numpy as np
>>> a = np.array([2,3,4])
>>> a
array([2, 3, 4])
>>> a.dtype
dtype('int64')
>>> b = np.array([1.2, 3.5, 5.1])
>>> b.dtype
dtype('float64')

多维数组:

>>> b = np.array([(1.5,2,3), (4,5,6)])
>>> b
array([[ 1.5, 2. , 3. ],
    [ 4. , 5. , 6. ]])

生成数组的同时指定类型:

>>> c = np.array( [ [1,2], [3,4] ], dtype=complex )
>>> c
array([[ 1.+0.j, 2.+0.j],
    [ 3.+0.j, 4.+0.j]])

生成数组并赋为特殊值:

ones:全1
zeros:全0
empty:随机数,取决于内存情况

>>> np.zeros( (3,4) )
array([[ 0., 0., 0., 0.],
    [ 0., 0., 0., 0.],
    [ 0., 0., 0., 0.]])
>>> np.ones( (2,3,4), dtype=np.int16 )        # dtype can also be specified
array([[[ 1, 1, 1, 1],
    [ 1, 1, 1, 1],
    [ 1, 1, 1, 1]],
    [[ 1, 1, 1, 1],
    [ 1, 1, 1, 1],
    [ 1, 1, 1, 1]]], dtype=int16)
>>> np.empty( (2,3) )                 # uninitialized, output may vary
array([[ 3.73603959e-262,  6.02658058e-154,  6.55490914e-260],
    [ 5.30498948e-313,  3.14673309e-307,  1.00000000e+000]])

生成均匀分布的array:

arange(最小值,最大值,步长)(左闭右开)
linspace(最小值,最大值,元素数量)

>>> np.arange( 10, 30, 5 )
array([10, 15, 20, 25])
>>> np.arange( 0, 2, 0.3 )         # it accepts float arguments
array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
>>> np.linspace( 0, 2, 9 )         # 9 numbers from 0 to 2
array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
>>> x = np.linspace( 0, 2*pi, 100 )    # useful to evaluate function at lots of points

三.基本运算:

整个array按顺序参与运算:

>>> a = np.array( [20,30,40,50] )
>>> b = np.arange( 4 )
>>> b
array([0, 1, 2, 3])
>>> c = a-b
>>> c
array([20, 29, 38, 47])
>>> b**2
array([0, 1, 4, 9])
>>> 10*np.sin(a)
array([ 9.12945251, -9.88031624, 7.4511316 , -2.62374854])
>>> a<35
array([ True, True, False, False], dtype=bool)

两个二维使用*符号仍然是按位置一对一相乘,如果想表示矩阵乘法,使用dot:

>>> A = np.array( [[1,1],
...       [0,1]] )
>>> B = np.array( [[2,0],
...       [3,4]] )
>>> A*B             # elementwise product
array([[2, 0],
    [0, 4]])
>>> A.dot(B)          # matrix product
array([[5, 4],
    [3, 4]])
>>> np.dot(A, B)        # another matrix product
array([[5, 4],
    [3, 4]])

内置函数(min,max,sum),同时可以使用axis指定对哪一维进行操作:

>>> b = np.arange(12).reshape(3,4)
>>> b
array([[ 0, 1, 2, 3],
    [ 4, 5, 6, 7],
    [ 8, 9, 10, 11]])
>>>
>>> b.sum(axis=0)              # sum of each column
array([12, 15, 18, 21])
>>>
>>> b.min(axis=1)              # min of each row
array([0, 4, 8])
>>>
>>> b.cumsum(axis=1)             # cumulative sum along each row
array([[ 0, 1, 3, 6],
    [ 4, 9, 15, 22],
    [ 8, 17, 27, 38]])

Numpy同时提供很多全局函数

>>> B = np.arange(3)
>>> B
array([0, 1, 2])
>>> np.exp(B)
array([ 1.    , 2.71828183, 7.3890561 ])
>>> np.sqrt(B)
array([ 0.    , 1.    , 1.41421356])
>>> C = np.array([2., -1., 4.])
>>> np.add(B, C)
array([ 2., 0., 6.])

四.寻址,索引和遍历:

一维数组的遍历语法和python list类似:

>>> a = np.arange(10)**3
>>> a
array([ 0,  1,  8, 27, 64, 125, 216, 343, 512, 729])
>>> a[2]
8
>>> a[2:5]
array([ 8, 27, 64])
>>> a[:6:2] = -1000  # equivalent to a[0:6:2] = -1000; from start to position 6, exclusive, set every 2nd element to -1000
>>> a
array([-1000,   1, -1000,  27, -1000,  125,  216,  343,  512,  729])
>>> a[ : :-1]                 # reversed a
array([ 729,  512,  343,  216,  125, -1000,  27, -1000,   1, -1000])
>>> for i in a:
...   print(i**(1/3.))
...
nan
1.0
nan
3.0
nan
5.0
6.0
7.0
8.0
9.0

多维数组的访问通过给每一维指定一个索引,顺序是先高维再低维:

>>> def f(x,y):
...   return 10*x+y
...
>>> b = np.fromfunction(f,(5,4),dtype=int)
>>> b
array([[ 0, 1, 2, 3],
    [10, 11, 12, 13],
    [20, 21, 22, 23],
    [30, 31, 32, 33],
    [40, 41, 42, 43]])
>>> b[2,3]
23
>>> b[0:5, 1]            # each row in the second column of b
array([ 1, 11, 21, 31, 41])
>>> b[ : ,1]            # equivalent to the previous example
array([ 1, 11, 21, 31, 41])
>>> b[1:3, : ]           # each column in the second and third row of b
array([[10, 11, 12, 13],
    [20, 21, 22, 23]])
When fewer indices are provided than the number of axes, the missing indices are considered complete slices:

>>>
>>> b[-1]                 # the last row. Equivalent to b[-1,:]
array([40, 41, 42, 43])

…符号表示将所有未指定索引的维度均赋为 : ,:在python中表示该维所有元素:

>>> c = np.array( [[[ 0, 1, 2],        # a 3D array (two stacked 2D arrays)
...         [ 10, 12, 13]],
...        [[100,101,102],
...         [110,112,113]]])
>>> c.shape
(2, 2, 3)
>>> c[1,...]                  # same as c[1,:,:] or c[1]
array([[100, 101, 102],
    [110, 112, 113]])
>>> c[...,2]                  # same as c[:,:,2]
array([[ 2, 13],
    [102, 113]])

遍历:

如果只想遍历整个array可以直接使用:

>>> for row in b:
...   print(row)
...
[0 1 2 3]
[10 11 12 13]
[20 21 22 23]
[30 31 32 33]
[40 41 42 43]

但是如果要对每个元素进行操作,就要使用flat属性,这是一个遍历整个数组的迭代器

>>> for element in b.flat:
...   print(element)
...

总结

以上所述是小编给大家介绍的Python Numpy 数组的初始化和基本操作,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python压缩和解压缩zip文件
Feb 14 Python
讲解Python中运算符使用时的优先级
May 14 Python
Python利用matplotlib生成图片背景及图例透明的效果
Apr 27 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
Jan 02 Python
wxPython实现带颜色的进度条
Nov 19 Python
python支持多线程的爬虫实例
Dec 21 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
Jan 06 Python
python多进程下的生产者和消费者模型
May 07 Python
django template实现定义临时变量,自定义赋值、自增实例
Jul 12 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
Python 获取异常(Exception)信息的几种方法
Dec 29 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
Jul 07 Python
python 中的list和array的不同之处及转换问题
Mar 13 #Python
python2.7安装图文教程
Mar 13 #Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
Mar 13 #Python
Django使用Celery异步任务队列的使用
Mar 13 #Python
特征脸(Eigenface)理论基础之PCA主成分分析法
Mar 13 #Python
python Celery定时任务的示例
Mar 13 #Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 #Python
You might like
IStream与TStream之间的相互转换
2008/08/01 PHP
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
php中删除数组的第一个元素和最后一个元素的函数
2015/03/07 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
Javascript的一种模块模式
2010/09/08 Javascript
jquery $.ajax()取xml数据的小问题解决方法
2010/11/20 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
创建你的第一个AngularJS应用的方法
2015/06/16 Javascript
JS+CSS实现六级网站导航主菜单效果
2015/09/28 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
javascript特效实现——当前时间和倒计时效果的简单实例
2016/07/20 Javascript
JavaScript的字符串方法汇总
2016/07/31 Javascript
jQuery+ajax读取并解析XML文件的方法
2016/09/09 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
jQuery实现每日秒杀商品倒计时功能
2019/09/06 jQuery
微信小程序 轮播图实现原理及优化详解
2019/09/29 Javascript
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
用Python的urllib库提交WEB表单
2009/02/24 Python
Python3使用pandas模块读写excel操作示例
2018/07/03 Python
pandas DataFrame 删除重复的行的实现方法
2019/01/29 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
园林设计专业毕业生求职信
2014/03/23 职场文书
协议书格式
2014/04/23 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
我们的节日端午节活动总结
2015/02/11 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
唐山大地震的观后感
2015/06/05 职场文书