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的Django框架实现事务交易管理的教程
Apr 20 Python
python实现备份目录的方法
Aug 03 Python
Python基础教程之正则表达式基本语法以及re模块
Mar 25 Python
Python编写简单的HTML页面合并脚本
Jul 11 Python
python用装饰器自动注册Tornado路由详解
Feb 14 Python
Python实现曲线点抽稀算法的示例
Oct 12 Python
Python2实现的图片文本识别功能详解
Jul 11 Python
Python3+Appium实现多台移动设备操作的方法
Jul 05 Python
Python编程快速上手——强口令检测算法案例分析
Feb 29 Python
打印tensorflow恢复模型中所有变量与操作节点方式
May 26 Python
python 实现音频叠加的示例
Oct 29 Python
Python合并多张图片成PDF
Jun 09 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
使用PHP维护文件系统
2006/10/09 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
JavaScript中的无阻塞加载性能优化方案
2014/10/10 Javascript
基于JavaScript实现瀑布流布局(二)
2016/01/26 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑
2016/12/14 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
jQuery实现上下滚动公告栏详细代码
2018/11/21 jQuery
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
jQuery实现移动端笔触canvas电子签名
2020/05/21 jQuery
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
JS如何监听div的resize事件详解
2020/12/03 Javascript
python中List的sort方法指南
2014/09/01 Python
Python中数字以及算数运算符的相关使用
2015/10/12 Python
Python实现的在特定目录下导入模块功能分析
2019/02/11 Python
Python爬虫抓取技术的一些经验
2019/07/12 Python
python的pygal模块绘制反正切函数图像方法
2019/07/16 Python
使用Python发现隐藏的wifi
2020/03/04 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
StubHub智利:购买和出售您的门票
2016/11/23 全球购物
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
幼儿园区域活动总结
2014/05/08 职场文书
医院信息公开实施方案
2014/05/09 职场文书
大学生活感想
2015/08/10 职场文书
Nginx中break与last的区别详析
2021/03/31 Servers